您现在的位置是:首页 >技术杂谈 >Python爬虫-随机UA,识别HTML源码中的url并跳转网站首页技术杂谈
Python爬虫-随机UA,识别HTML源码中的url并跳转
简介Python爬虫-随机UA,识别HTML源码中的url并跳转
需要导入的Python库有这些:
import requests
import time
from bs4 import BeautifulSoup
import random
首先来了解,什么是UA?
UA就是:User-Agent,是一种浏览器的标识,爬虫除非是访问网站或APP专用数据api接口,正常的HTTP请求都需要进行ua(User-Agent)优化,因为ua是浏览器标识,如果http请求没有ua,或ua太少,都会被网站运维统计异常的,ua越丰富分布就越真实。
为了丰富UA,我们在请求头 headers 里面添加随机 UA ,随机UA怎么添加呢?
回顾Python基础里面有一个随机函数:random函数,它可以生成随机数,而如果给定可以库,它可以实现随机抽取,如下:
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.3',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 EDGE/16.16299',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
]
random_user_agent = random.choice(user_agents)
headers = {'User-Agent': random_user_agent}
我给定了五个UA,random函数可以从中随机依次抽取,到这里,我们实现了随机UA。
接下来要实现:识别HTML源码中的url并跳转,即:
1.爬取html 2.识别包含的url 3.再次请求url
实现此功能需要用到另一个标准库:BeautifulSoup库
BeautifulSoup是什么?
BeautifulSoup库是python的一个HTML或者XML的解析库,可以通过它来实现对网页的解析,从而获得想要的数据。
使用以下命令安装该库:
pip install beautifulsoup4
实现识别HTML源码中的url并跳转:
url = "https://www.86000k.com/"
# 发送HTTP请求并获取响应
response = requests.get(url,headers=headers)
# 解析HTML源代码
soup = BeautifulSoup(response.text, "html.parser")
# 提取出a标签的href属性中的链接
links = soup.find_all("a")
for link in links:
href = link.get("href")
# 判断链接是否为完整的URL,如果不是则拼接上初始URL的协议和主机名
if not href.startswith("http"):
href = url + href
# 打印处理完的链接
print(href)
time.sleep(2)
# 访问提取出来的链接并获取响应
response = requests.get(href)
# 对响应进行处理
完整的代码如下:
import requests
import time
from bs4 import BeautifulSoup
import random
user_agents = [
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.3',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 EDGE/16.16299',
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; AS; rv:11.0) like Gecko'
]
random_user_agent = random.choice(user_agents)
headers = {'User-Agent': random_user_agent}
# 访问的初始URL
url = "https://www.86000k.com/"
# 发送HTTP请求并获取响应
response = requests.get(url,headers=headers)
# 解析HTML源代码
soup = BeautifulSoup(response.text, "html.parser")
# 提取出a标签的href属性中的链接
links = soup.find_all("a")
for link in links:
href = link.get("href")
# 判断链接是否为完整的URL,如果不是则拼接上初始URL的协议和主机名
if not href.startswith("http"):
href = url + href
# 打印处理完的链接
print(href)
time.sleep(2)
# 访问提取出来的链接并获取响应
response = requests.get(href)
# 对响应进行处理
运行结果如下:
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。