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捕捉和模拟鼠标事件的方法
Jun 03 Python
详解Python 序列化Serialize 和 反序列化Deserialize
Aug 20 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
pytorch构建网络模型的4种方法
Apr 13 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
python算法题 链表反转详解
Jul 02 Python
Anaconda 查看、创建、管理和使用python环境的方法
Dec 03 Python
Python对wav文件的重采样实例
Feb 25 Python
Python使用tkinter实现小时钟效果
Feb 22 Python
Python函数中的不定长参数相关知识总结
Jun 24 Python
Python  序列化反序列化和异常处理的问题小结
Dec 24 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记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
Thinkphp 框架扩展之类库扩展操作详解
2020/04/23 PHP
JQuery 初体验(建议学习jquery)
2009/04/25 Javascript
js 数组操作代码集锦
2009/04/28 Javascript
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
为jquery的ajaxfileupload增加附加参数的方法
2014/03/04 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
jquery让指定的元素闪烁显示的方法
2015/03/17 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
jQuery.Ajax()的data参数类型详解
2017/07/23 jQuery
React学习笔记之列表渲染示例详解
2017/08/22 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
Python获取当前时间的方法
2014/01/14 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
Python实现针对给定字符串寻找最长非重复子串的方法
2018/04/21 Python
详解python列表生成式和列表生成式器区别
2019/03/27 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
Python将QQ聊天记录生成词云的示例代码
2021/02/10 Python
使用CSS3编写灰阶滤镜来制作黑白照片效果的方法
2016/05/09 HTML / CSS
原料仓仓管员岗位职责
2014/07/08 职场文书
房屋买卖协议样本
2014/11/16 职场文书
工程部岗位职责
2015/02/10 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
vue组件冲突之引用另一个组件出现组件不显示的问题
2022/04/13 Vue.js
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技