python 实现爬取网站下所有URL
python3 实现爬取网站下所有URL
- python3.6
- requests && bs4
- 采用递归方法,最终爬取网站所有链接
获取首页元素信息:
目标 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链接获取,具体代码如下:
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)
全部代码如下:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
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)
小结:
刚开始学习写python脚本,有不足之处,多多指导,有一个小bug,后期会进一步完善。
python 实现爬取网站下所有URL的更多相关文章
- Python:爬取网站图片并保存至本地
Python:爬取网页图片并保存至本地 python3爬取网页中的图片到本地的过程如下: 1.爬取网页 2.获取图片地址 3.爬取图片内容并保存到本地 实例:爬取百度贴吧首页图片. 代码如下: imp ...
- Python脚本爬取网站美女照片
上次无意之中看到一个网站,里面全是美女的照片,我就心想,哪天有时间了得把这网站的所有美女照片都得爬下来.今天有时间,写了点代码,爬去了网站的所有照片.附上战果!图片实在是太多了,爬半个多小时 先附上所 ...
- java爬取网站信息和url实例
https://blog.csdn.net/weixin_38409425/article/details/78616688(出自此為博主) 具體代碼如下: import java.io.Buffer ...
- 用Python定时爬取网站最新资源
记录一下. 写做个网站,爬了另一个网站的内容来做自己网站的内容. 把脚本挂到服务器,每隔一个小时去爬一次资源,然后保存到一个HTML文件里. 用flask做web对接,当有请求的时候就返回那个HTML ...
- 【Python】爬取网站图片
import requests import bs4 import urllib.request import urllib import os hdr = {'User-Agent': 'Mozil ...
- Python 利用 BeautifulSoup 爬取网站获取新闻流
0. 引言 介绍下 Python 用 Beautiful Soup 周期性爬取 xxx 网站获取新闻流: 图 1 项目介绍 1. 开发环境 Python: 3.6.3 BeautifulSoup: ...
- python scrapy爬取知乎问题和收藏夹下所有答案的内容和图片
上文介绍了爬取知乎问题信息的整个过程,这里介绍下爬取问题下所有答案的内容和图片,大致过程相同,部分核心代码不同. 爬取一个问题的所有内容流程大致如下: 一个问题url 请求url,获取问题下的答案个数 ...
- 使用Python爬虫爬取网络美女图片
代码地址如下:http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip install ...
- Python爬虫|爬取喜马拉雅音频
"GOOD Python爬虫|爬取喜马拉雅音频 喜马拉雅是知名的专业的音频分享平台,用户规模突破4.8亿,汇集了有声小说,有声读物,儿童睡前故事,相声小品等数亿条音频,成为国内发展最快.规模 ...
随机推荐
- 透视BlueStore存储结构:如何根据文件名从裸盘提取文件内容
在FileStore下,用户文件经过切分对象块后最终存放在了单机文件系统(xfs .ext4等)中,我们可以较容易地找到这些对象块对应的文件,然后提取这些对象块文件后组装成用户文件.然而,BlueSt ...
- 分享SQL,查询用户最近一次购买时间间隔
(1)先创建一张测试表: CREATE TABLE `用户购买订单` ( `购买时间` datetime(6) NULL DEFAULT NULL, `用户` varchar(20) CHARACTE ...
- BZOJ 3990 排序
[题目描述]: 小A有一个1~2N的排列A[1..2N],他希望将数组A从小到大排序.小A可以执行的操作有N种,每种操作最多可以执行一次.对于所有的i(1<=i<=N),第i种操作为:将序 ...
- Codeforces Gym101341K:Competitions(DP)
http://codeforces.com/gym/101341/problem/K 题意:给出n个区间,每个区间有一个l, r, w,代表区间左端点右端点和区间的权值,现在可以选取一些区间,要求选择 ...
- java的封神之路[转载]
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133 http://i ...
- Linux命令学习-tar命令
Linux中,tar命令的全称是tape archive,主要作用是压缩和解压文件. 参数说明: -c 创建新的压缩档案 -x 解压档案 -t 列出压缩档案的内容 -z 使用gzip来解压和压缩,文件 ...
- 如何编写无须人工干预的shell脚本
在使用基本的一些shell命令时,机器需要与人进行互动来确定命令的执行.比如 cp test.txt boo/test.txt,会询问是否覆盖?ssh远程登陆时,需要输入人工密码后,才可以继续执行ss ...
- 9.16考试 第一题 X国的军队题解
这道题总体来看还是比较满意的.连想带打不超过半个小时,打了不到当时基本读懂后就感觉是贪心,但贪什么很重要,当时一开始想的是贪心死亡人数,从小到大搞,然后自己造了几个小数据,还好WA了,然后又列了一个式 ...
- 星际旅行(欧拉路,欧拉回路)(20190718 NOIP模拟测试5)
瞎搞了一个ans+=du*(du-1)/2 wa20分,好桑心(话外音:居然还有二十分,出题人太周到了) 还是判欧拉路 题解没太仔细想,感觉还是kx的思路明白 具体就是:因为每条边要走两遍,可以把一条 ...
- Zeppelin0.5.6使用spark解释器
Zeppelin为0.5.6 Zeppelin默认自带本地spark,可以不依赖任何集群,下载bin包,解压安装就可以使用. 使用其他的spark集群在yarn模式下. 配置: vi zeppelin ...