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 01 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
Python检测网络延迟的代码
May 15 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
python3.6的venv模块使用详解
Aug 01 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
django用户登录验证的完整示例代码
Jul 21 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
python实现word文档批量转成自定义格式的excel文档的思路及实例代码
Feb 21 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
python实现腾讯滑块验证码识别
Apr 27 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
利用PHP_XLSXWriter代替PHPExcel的方法示例
2017/07/16 PHP
ThinkPHP5.0 图片上传生成缩略图实例代码说明
2018/06/20 PHP
用javascript实现无刷新更新数据的详细步骤 asp
2006/12/26 Javascript
Sample script that displays all of the users in a given SQL Server DB
2007/06/16 Javascript
jquery下实现overlay遮罩层代码
2010/08/25 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
对比分析json及XML
2014/11/28 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
jQuery实现查找最近父节点的方法
2016/06/23 Javascript
举例讲解jQuery对DOM元素的向上遍历、向下遍历和水平遍历
2016/07/07 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
Node中使用ES6语法的基础教程
2018/01/05 Javascript
简谈创建React Component的几种方式
2019/06/15 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
python中反射用法实例
2015/03/27 Python
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python发送email的3种方法
2015/04/28 Python
Python中动态检测编码chardet的使用教程
2017/07/06 Python
django框架实现模板中获取request 的各种信息示例
2019/07/01 Python
zooplus意大利:在线宠物商店
2019/08/07 全球购物
英语自荐信常用语句
2013/12/13 职场文书
给儿子的表扬信
2014/01/15 职场文书
六月份红领巾广播稿
2014/02/03 职场文书
希特勒的演讲稿
2014/05/23 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
微信小程序和php的登录实现
2021/04/01 PHP
react 项目中引入图片的几种方式
2021/06/02 Javascript
Android中的Launch Mode详情
2022/06/05 Java/Android