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 18 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Python实现GUI学生信息管理系统
Apr 05 Python
django静态文件加载的方法
May 20 Python
用Python逐行分析文件方法
Jan 28 Python
python基于递归解决背包问题详解
Jul 03 Python
利用python开发app实战的方法
Jul 09 Python
为什么从Python 3.6开始字典有序并效率更高
Jul 15 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
Python通过m3u8文件下载合并ts视频的操作
Apr 16 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
Jun 21 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与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
JQUERY操作JSON实例代码
2010/02/09 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
nodejs实现获取当前url地址及url各种参数值
2015/06/25 NodeJs
原生js实现图片轮播特效
2015/12/18 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
AngularJS 单元测试(一)详解
2016/09/21 Javascript
vue.js表格分页示例
2016/10/18 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
微信小程序之MaterialDesign--input组件详解
2017/02/15 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
axios+Vue实现上传文件显示进度功能
2019/04/14 Javascript
Vue运用transition实现过渡动画
2019/05/06 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
JavaScript 判断数据类型的4种方法
2020/09/11 Javascript
python将图片文件转换成base64编码的方法
2015/03/14 Python
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
python使用matplotlib绘制热图
2018/11/07 Python
python super的使用方法及实例详解
2019/09/25 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
Hotels.com中国区:好订网
2016/08/18 全球购物
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
就业表自我评价分享
2014/02/06 职场文书
师范生自我鉴定
2014/03/20 职场文书
水电施工员岗位职责
2015/04/11 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python