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访问纯真IP数据库的代码
May 19 Python
Python自动发邮件脚本
Mar 31 Python
python实现比较文件内容异同
Jun 22 Python
浅谈python脚本设置运行参数的方法
Dec 03 Python
python匹配两个短语之间的字符实例
Dec 25 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
基于python实现文件加密功能
Jan 06 Python
Python根据指定文件生成XML的方法
Jun 29 Python
python3.7添加dlib模块的方法
Jul 01 Python
Selenium 安装和简单使用的实现
Dec 04 Python
python井字棋游戏实现人机对战
Apr 28 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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
2014/06/23 PHP
注释PHP和html混合代码的小技巧(分享)
2016/11/03 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
ExtJS下grid的一些属性说明
2009/12/13 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
png在IE6 下无法透明的解决方法汇总
2015/05/21 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
JS实现留言板功能
2017/06/17 Javascript
JS数组交集、并集、差集的示例代码
2017/08/23 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
vue实现分页栏效果
2019/06/28 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
[01:14:31]Secret vs VG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
优秀共产党员先进事迹
2014/01/27 职场文书
五年级英语教学反思
2014/01/31 职场文书
运动会方阵解说词
2014/02/12 职场文书
安全承诺书
2015/01/19 职场文书
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
Python 的演示平台支持 WSGI 接口的应用
2022/04/20 Python