Python3 实现爬取网站下所有URL方式


Posted in Python onJanuary 16, 2020

获取首页元素信息:

目标 test_URL:http://www.xxx.com.cn/

首先检查元素,a 标签下是我们需要爬取得链接,通过获取链接路径,定位出我们需要的信息

soup = Bs4(reaponse.text, "lxml")
urls_li = soup.select("#mainmenu_top > div > div > ul > li")

首页的URL链接获取:

完成首页的URL链接获取,具体代码如下:

'''
遇到不懂的问题?Python学习交流群:821460695满足你的需求,资料都已经上传群文件,可以自行下载!
'''
def get_first_url():
  list_href = []
  reaponse = requests.get("http://www.xxx.com.cn", headers=headers)
  soup = Bs4(reaponse.text, "lxml")
  urls_li = soup.select("#mainmenu_top > div > div > ul > li")
  for url_li in urls_li:
    urls = url_li.select("a")
    for url in urls:
      url_href = url.get("href")
      list_href.append(head_url+url_href)
      out_url = list(set(list_href))
  for reg in out_url:
    print(reg)

遍历第一次返回的结果:

从第二步获取URL的基础上,遍历请求每个页面,获取页面中的URL链接,过滤掉不需要的信息

具体代码如下:

def get_next_url(urllist):
  url_list = []
  for url in urllist:
    response = requests.get(url,headers=headers)
    soup = Bs4(response.text,"lxml")
    urls = soup.find_all("a")
    if urls:
      for url2 in urls:
        url2_1 = url2.get("href")
        if url2_1:
          if url2_1[0] == "/":
            url2_1 = head_url + url2_1
            url_list.append(url2_1)
            if url2_1[0:24] == "http://www.xxx.com.cn":
              url2_1 = url2_1
              url_list.append(url2_1)
            else:
              pass
          else:
            pass
        else:
          pass
    else:
      pass
  url_list2 = set(url_list)
  for url_ in url_list2:
    res = requests.get(url_)
    if res.status_code ==200:
      print(url_)
  print(len(url_list2))

递归循环遍历:

递归实现爬取所有url,在get_next_url()函数中调用自身,代码如下:

get_next_url(url_list2)

全部代码如下:

import requests
from bs4 import BeautifulSoup as Bs4

head_url = "http://www.xxx.com.cn"
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
def get_first_url():
  list_href = []
  reaponse = requests.get(head_url, headers=headers)
  soup = Bs4(reaponse.text, "lxml")
  urls_li = soup.select("#mainmenu_top > div > div > ul > li")
  for url_li in urls_li:
    urls = url_li.select("a")
    for url in urls:
      url_href = url.get("href")
      list_href.append(head_url+url_href)
      out_url = list(set(list_href))
  return out_url


def get_next_url(urllist):
  url_list = []
  for url in urllist:
    response = requests.get(url,headers=headers)
    soup = Bs4(response.text,"lxml")
    urls = soup.find_all("a")
    if urls:
      for url2 in urls:
        url2_1 = url2.get("href")
        if url2_1:
          if url2_1[0] == "/":
            url2_1 = head_url + url2_1
            url_list.append(url2_1)
            if url2_1[0:24] == "http://www.xxx.com.cn":
              url2_1 = url2_1
              url_list.append(url2_1)
            else:
              pass
          else:
            pass
        else:
          pass
    else:
      pass
  url_list2 = set(url_list)
  for url_ in url_list2:
    res = requests.get(url_)
    if res.status_code ==200:
      print(url_)
  print(len(url_list2))
  get_next_url(url_list2)


if __name__ == "__main__":
  urllist = get_first_url()
  get_next_url(urllist)

以上这篇Python3 实现爬取网站下所有URL方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python开发实例分享bt种子爬虫程序和种子解析
May 21 Python
Python中的测试模块unittest和doctest的使用教程
Apr 14 Python
Python基于matplotlib绘制栈式直方图的方法示例
Aug 09 Python
Python+tkinter模拟“记住我”自动登录实例代码
Jan 16 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
django配置app中的静态文件步骤
Mar 27 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
Jun 08 Python
Python 如何测试文件是否存在
Jul 31 Python
python中entry用法讲解
Dec 04 Python
python中Mako库实例用法
Dec 31 Python
总结python多进程multiprocessing的相关知识
Jun 29 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 Python
python3爬取torrent种子链接实例
Jan 16 #Python
Python 实现自动获取种子磁力链接方式
Jan 16 #Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 #Python
Python简单实现区域生长方式
Jan 16 #Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 #Python
Pycharm中Python环境配置常见问题解析
Jan 16 #Python
Python Numpy库常见用法入门教程
Jan 16 #Python
You might like
五个PHP程序员工具
2008/05/26 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
2020/08/06 PHP
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
分享20款好玩的jQuery游戏
2011/04/17 Javascript
js querySelector和getElementById通过id获取元素的区别
2012/04/20 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
vue 使用高德地图vue-amap组件过程解析
2019/09/07 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
介绍Python中的文档测试模块
2015/04/28 Python
初步解析Python下的多进程编程
2015/04/28 Python
Python实现将16进制字符串转化为ascii字符的方法分析
2017/07/21 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
Python实现Restful API的例子
2019/08/31 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
实习自荐信
2013/10/13 职场文书
广告学专业自荐信范文
2014/02/24 职场文书
企业宣传工作方案
2014/06/02 职场文书
活动宣传稿范文
2015/07/23 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书