您现在的位置是:首页 >技术杂谈 >Python爬虫-随机UA,识别HTML源码中的url并跳转网站首页技术杂谈

Python爬虫-随机UA,识别HTML源码中的url并跳转

不糕兴 2023-07-09 04:00:02
简介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)
    # 对响应进行处理

运行结果如下:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。