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参数和作用域的使用
Nov 01 Python
Python生成器(Generator)详解
Apr 13 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
Sanic框架应用部署方法详解
Jul 18 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
django数据库自动重连的方法实例
Jul 21 Python
vscode 配置 python3开发环境的方法
Sep 19 Python
windows中安装Python3.8.0的实现方法
Nov 19 Python
python GUI库图形界面开发之PyQt5浏览器控件QWebEngineView详细使用方法
Feb 26 Python
使用Pycharm分段执行代码
Apr 15 Python
详解Python 中的容器 collections
Aug 17 Python
详解Python中的for循环
Apr 30 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自定义函数收代码
2010/08/01 PHP
PHP的基本常识小结
2013/07/05 PHP
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
node.js中的http.response.end方法使用说明
2014/12/14 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JavaScript实现强制重定向至HTTPS页面
2015/06/10 Javascript
nodejs搭建本地服务器并访问文件的方法
2017/03/03 NodeJs
JavaScript实现构造json数组的方法分析
2018/08/17 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
小程序实现订单倒计时功能
2019/04/23 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
python两种遍历字典(dict)的方法比较
2014/05/29 Python
分享15个最受欢迎的Python开源框架
2014/07/13 Python
python 如何快速找出两个电子表中数据的差异
2017/05/26 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python 公共方法汇总解析
2019/09/16 Python
Python2和Python3中@abstractmethod使用方法
2020/02/04 Python
Python调用Windows命令打印文件
2020/02/07 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
Python如何安装第三方模块
2020/05/28 Python
PyQt5实现简单的计算器
2020/05/30 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
Swanson中国官网:美国斯旺森健康产品公司
2021/03/01 全球购物
医生个人年度总结
2015/02/28 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP