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 相关文章推荐
pycharm执行python时,填写参数的方法
Oct 29 Python
python使用KNN算法识别手写数字
Apr 25 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
使用Python实现分别输出每个数组
Dec 06 Python
python logging设置level失败的解决方法
Feb 19 Python
Python流程控制语句的深入讲解
Jun 15 Python
Python中快速掌握Data Frame的常用操作
Mar 31 Python
教你怎么用Python生成九宫格照片
May 20 Python
Python快速实现一键抠图功能的全过程
Jun 29 Python
Python循环之while无限迭代
Apr 30 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
为指定元素增加样式的js代码
2009/12/09 Javascript
javascript实现的在当前窗口中漂浮框的代码
2010/03/15 Javascript
jquery下onpropertychange事件的绑定方法
2010/08/01 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
js快速排序的实现代码
2013/12/08 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
理理Vue细节(推荐)
2019/04/16 Javascript
vue.js iview打包上线后字体图标不显示解决办法
2020/01/20 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
2020/03/31 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
python中sys.argv函数精简概括
2018/07/08 Python
python+Splinter实现12306抢票功能
2018/09/25 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
pybind11和numpy进行交互的方法
2019/07/04 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
英国时尚女装购物网站:Missguided
2018/08/23 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2016/01/06 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
寒假思想汇报
2014/01/10 职场文书
股权收购意向书
2014/04/01 职场文书
跳槽求职信范文
2014/05/26 职场文书
技术经济专业求职信
2014/09/03 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
婚礼女方父母答谢词
2015/01/04 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
大学迎新生的欢迎词
2019/06/25 职场文书
前端实现滑动按钮AJAX与后端交互的示例代码
2022/02/24 Javascript
python中mongodb包操作数据库
2022/04/19 Python
MySQL范围查询优化的场景实例详解
2022/06/10 MySQL