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下载Bing图片(代码)
Nov 07 Python
python出现"IndentationError: unexpected indent"错误解决办法
Oct 15 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
TensorFlow查看输入节点和输出节点名称方式
Jan 04 Python
Python 读取有公式cell的结果内容实例方法
Feb 17 Python
基于python3的socket聊天编程
Feb 17 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
通过Python实现一个简单的html页面
May 16 Python
Python同时处理多个异常的方法
Jul 28 Python
Python爬取微信小程序Charles实现过程图解
Sep 29 Python
python绘图pyecharts+pandas的使用详解
Dec 13 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 mssql 时间格式问题
2009/01/13 PHP
php替换超长文本中的特殊字符的函数代码
2012/05/22 PHP
获取PHP警告错误信息的解决方法
2013/06/03 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
2014/11/22 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
JavaScript高级程序设计 客户端存储学习笔记
2011/09/10 Javascript
谷歌Chrome浏览器扩展程序开发小记
2016/01/06 Javascript
easyUI实现(alert)提示框自动关闭的实例代码
2016/11/07 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
JS多文件上传的实例代码
2017/01/11 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
python解析模块(ConfigParser)使用方法
2013/12/10 Python
python实用代码片段收集贴
2015/06/03 Python
Python Queue模块详细介绍及实例
2016/12/27 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
python自动发送邮件脚本
2018/06/20 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Django用户身份验证完成示例代码
2020/04/03 Python
Python爬虫:Request Payload和Form Data的简单区别说明
2020/04/30 Python
如何在Python对Excel进行读取
2020/06/04 Python
python实现定时发送邮件到指定邮箱
2020/12/23 Python
KIKO比利时官网:意大利彩妆品牌
2017/07/23 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
美国一家著名的手表在线折扣网站:Discount Watch Store
2020/02/24 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
常务副总经理岗位职责
2014/04/12 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
施工安全责任协议书
2016/03/23 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
Python移位密码、仿射变换解密实例代码
2021/06/27 Python