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性能优化的20条建议
Oct 25 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
python实现Excel文件转换为TXT文件
Apr 28 Python
Python 抓取微信公众号账号信息的方法
Jun 14 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
如何用Python来理一理红楼梦里的那些关系
Aug 14 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
如何基于Python代码实现高精度免费OCR工具
Jun 18 Python
Python requests及aiohttp速度对比代码实例
Jul 16 Python
如何用python免费看美剧
Aug 11 Python
python实现人性化显示金额数字实例详解
Sep 25 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
根据中文裁减字符串函数的php代码
2013/12/03 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
firebug的一个有趣现象介绍
2011/11/30 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
2013/04/25 Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
2013/10/11 Javascript
JavaScript中toString()方法的使用详解
2015/06/05 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
Vue.js中的图片引用路径的方式
2017/07/28 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
Layui事件监听的实现(表单和数据表格)
2019/10/17 Javascript
js实现幻灯片轮播图
2020/08/14 Javascript
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python实现用户登录系统
2016/05/21 Python
python与C互相调用的方法详解
2017/07/14 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python3基于OpenCV实现证件照背景替换
2018/07/18 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
草莓网英国官网:Strawberrynet UK
2017/02/12 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
Linux的主要特性
2016/09/03 面试题
高一家长会邀请函
2014/01/12 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
法制演讲稿
2014/09/10 职场文书
2014年社区卫生工作总结
2014/12/18 职场文书
校运会新闻稿
2015/07/17 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python