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算法学习之计数排序实例
Dec 18 Python
Python中join和split用法实例
Apr 14 Python
使用Python搭建虚拟环境的配置方法
Feb 28 Python
Django Web开发中django-debug-toolbar的配置以及使用
May 06 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
Python绘制的二项分布概率图示例
Aug 22 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
Feb 26 Python
Python TestSuite生成测试报告过程解析
Jul 23 Python
Python configparser模块应用过程解析
Aug 14 Python
python进度条显示-tqmd模块的实现示例
Aug 23 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的简易冒泡法代码分享
2012/08/28 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
php实现阳历阴历互转的方法
2015/10/28 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
php-fpm服务启动脚本的方法
2018/04/27 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
Javascript 遮罩层和加载效果代码
2013/08/01 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
angularJS与bootstrap结合实现动态加载弹出提示内容
2015/10/16 Javascript
jQuery遍历DOM节点操作之filter()方法详解
2016/04/14 Javascript
JQuery实现DIV其他动画效果的简单实例
2016/09/18 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
python多线程操作实例
2014/11/21 Python
Python二维码生成识别实例详解
2019/07/16 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
京东全球售:直邮香港,澳门,台湾,美国,澳大利亚等地区
2017/09/24 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
九州传奇上机题
2014/07/10 面试题
迎接领导欢迎词
2014/01/11 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
SQLServer之常用函数总结详解
2021/08/30 SQL Server
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
nginx实现多geoserver服务的负载均衡
2022/05/15 Servers