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程序中的应用示例
Mar 02 Python
Python基础知识_浅谈用户交互
May 31 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
Python爬取数据并写入MySQL数据库的实例
Jun 21 Python
Python面向对象类的继承实例详解
Jun 27 Python
给我一面国旗 python帮你实现
Sep 30 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
pyinstaller 3.6版本通过pip安装失败的解决办法(推荐)
Jan 18 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
如何用python识别滑块验证码中的缺口
Apr 01 Python
让文件路径提取变得更简单的Python Path库
May 27 Python
忆童年!用Python实现愤怒的小鸟游戏
Jun 07 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
php中一个完整表单处理实现代码
2011/11/10 PHP
解析php中的escape函数
2013/06/29 PHP
Thinkphp中volist标签mod控制一定记录的换行BUG解决方法
2014/11/04 PHP
php数字每三位加逗号的功能函数
2015/10/22 PHP
Yii2使用自带的UploadedFile实现的文件上传
2016/06/20 PHP
php创建多级目录与级联删除文件的方法示例
2019/09/12 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
利用jQuery的$.event.fix函数统一浏览器event事件处理
2009/12/21 Javascript
JavaScript中各种编码解码函数的区别和注意事项
2010/08/19 Javascript
Bootstrap的图片轮播示例代码
2015/08/31 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
全面了解javascript中的错误处理机制
2016/07/18 Javascript
ES6新特性之Symbol类型用法分析
2017/03/31 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
AngularJs1.x自定义指令独立作用域的函数传入参数方法
2018/10/09 Javascript
浅谈js闭包理解
2019/03/28 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
vue循环中点击选中再点击取消(单选)的实现
2020/09/10 Javascript
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
Python3 操作符重载方法示例
2017/11/23 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Django之模型层多表操作的实现
2019/01/08 Python
Python 如何对文件目录操作
2020/07/10 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
化工专业个人的求职信范文
2013/11/28 职场文书
中专毕业生的自我鉴定
2013/12/01 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
团购业务员岗位职责
2014/03/15 职场文书
企业承诺书格式
2014/05/21 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
社团招新宣传语
2015/07/13 职场文书
嘉年华活动新闻稿
2015/07/17 职场文书
高中同学会致辞
2015/08/01 职场文书