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错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
Python中super函数的用法
Nov 17 Python
python3写爬取B站视频弹幕功能
Dec 22 Python
Python基于whois模块简单识别网站域名及所有者的方法
Apr 23 Python
python保存数据到本地文件的方法
Jun 23 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
浅谈keras的深度模型训练过程及结果记录方式
Jan 24 Python
python 的topk算法实例
Apr 02 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
python输入中文的实例方法
Sep 14 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 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
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JS截取与分割字符串常用技巧总结
2015/11/10 Javascript
JS onkeypress兼容性写法详解
2016/04/27 Javascript
分享10个优化代码的CSS和JavaScript工具
2016/05/11 Javascript
js利用clipboardData实现截屏粘贴功能
2016/10/12 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
vue点击按钮实现简单页面的切换
2020/09/08 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
简单理解Python中的装饰器
2015/07/31 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
Django框架验证码用法实例分析
2019/05/10 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
基于Python绘制美观动态圆环图、饼图
2020/06/03 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
地图可视化神器kepler.gl python接口的使用方法
2020/12/22 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
实习老师离校感言
2014/02/03 职场文书
实习生求职自荐信
2014/02/07 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
好的旅游活动方案
2014/08/19 职场文书
2014卖家双十一活动策划书
2014/09/29 职场文书
开票员岗位职责
2015/02/12 职场文书
学生安全责任协议书
2016/03/22 职场文书
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers