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编写的最短路径算法
Mar 25 Python
python 远程统计文件代码分享
May 14 Python
利用Python破解斗地主残局详解
Jun 30 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
python实现本地批量ping多个IP的方法示例
Aug 07 Python
详解Python3 pickle模块用法
Sep 16 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Python插件机制实现详解
May 04 Python
python实例化对象的具体方法
Jun 17 Python
python线性插值解析
Jul 05 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
ThinkPHP采用模块和操作分析
2011/04/18 PHP
解决cPanel无法安装php5.2.17
2014/06/22 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
不错的一个日期输入 动态
2006/11/06 Javascript
javascript实现焦点滚动图效果 具体方法
2013/06/24 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
使用Math.max,Math.min获取数组中的最值实例
2017/04/25 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
2019/04/30 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
[03:38]TI4西雅图DOTA2前线报道 71专访
2014/07/08 DOTA
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
[01:34:42]NAVI vs EG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
python快速排序的实现及运行时间比较
2019/11/22 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
2020/02/07 Python
Django 再谈一谈json序列化
2020/03/16 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
洲际酒店集团美国官网:IHG美国
2017/11/16 全球购物
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
DNA测试:Orig3n
2019/03/01 全球购物
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
《桂花雨》教学反思
2014/04/12 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
导游词之无锡梅园
2019/11/28 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL