爬虫入门之模拟用户请求

接着上一篇文章 Python爬虫入门之初遇lxml库,我们说一下如何模拟用户请求,因为大多数网站都是有防爬虫措施的

学习爬虫要了解web知识,我们需要通过http请求头来伪装自己爬虫程序

1.修改请求头

这里要用到python的urllib.request的模块,首相介绍一下http请求头,它就是你每次在访问网页时,向服务器传输的一组属性和配置信息。下面有七个字段被大多数浏览器用来初始化网络请求。

属性

内容说明
Hostwww.baidu.com表示我们访问的主机
Connectionkeep-alive表示是否保持连接
Accepttext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8客户端可以接收端返回数据类型
User-AgentMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.2 Safari/605.1.15用户通过什么方式访问的服务器,我这里是safari浏览器,还可以设置通过手机、ipad
Referrerhttps://www.baidu.com/表示从哪里进入此网站的,比如从a网址跳转到b网址,那么访问b的时候这里的值就是a
Accept-Encodinggzip,deflate,sdch接受的编码格式
Accept-Languageen-cn,en;q=0.8接受的语言

这是是用户在访问网页时所发出的host请求(表格中是我的电脑发起的请求,打开F12可查看自己的host请求)。下面看一下为不加请求头时python爬虫发出的请求。

Accept-Encodingidentity
User-Agent

Python- urllib/3.7

下面我们通过python代码来模拟一下用户请求

import urllib.request

url = "https://www.baidu.com/"

def mkhead():
    header = {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'zh-cn',
        'Connection': 'keep-alive',
        'Host': 'www.baidu.com',
        'Referer': 'https://www.baidu.com/',
        'Cookie': 'uuid_tt_dd=10_35489889920-1563497330616-876822;',
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) '
                      'Version/14.0.2 Safari/605.1.15'}
    return header


header = mkhead()
req = urllib.request.Request(url=url, headers=header)
html_resp = urllib.request.urlopen(req).read().decode("utf-8")
print(html_resp)

2.设置爬取间隔时间

如果访问网址过于频繁会被有些服务器的反爬虫程序认为是被爬虫恶意请求,这时候我们就要设置爬取数据的频率

比如说最简单的方式用如下代码

import time

time.sleep(3)  # 让线程休息三秒

3.使用ip代理

有时候即使设置了爬取的间隔时间,还是会被服务器判别是爬虫程序,是因为我们的爬虫程序都是通过自己的ip地址发起请求,同一个ip访问次数过多会被服务器反爬虫机制直接拒绝

这时候我们要设置ip代理去发起请求

proxy_ip = “ip:port”
proxy_handler = urllib.request.ProxyHandler({'http': proxy_ip})
opener = urllib.request.build_opener(proxy_handler)
print(f"proxy_ip:{proxy_ip}\tlink:{self.link}")
headers = (
            'User-Agent', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) '
                          'Version/14.0.2 Safari/605.1.15')

opener.addheaders = [headers]
html_resp = opener.open(self.link).read().decode("utf-8")

proxy_ip是我们的ip代理,ip代理商有很多,有钱的话可以直接去购买

4.人机验证

目前遇到人机验证、验证码的需要采用第三方的识别验证码方式

5.ajax请求

有些网页一请求并没有数据,是通过ajax异步获取来的数据,这时候就需要我们模拟ajax请求来抓取数据

6.参数js加密

稍后补充

7.cookie限制

打开浏览器按f12,把cookie复制,放入请求头

 

总结

目前就学到这么多,先总结一下,文中有什么问题可以指出来,学到更多了再继续补充

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫从一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
模拟登录是爬虫中常见的任务之一,下面是一个简单的模拟登录示例,供您参考: ```python import requests # 创建一个Session对象 session = requests.session() # 构造登录请求的URL和表单数据 login_url = 'https://example.com/login' data = { 'username': 'your_username', 'password': 'your_password' } # 发送登录请求 response = session.post(login_url, data=data) # 检查登录是否成功 if response.status_code == 200: print("登录成功!") else: print("登录失败!") # 接下来可以使用session对象进行后续的请求,保持登录状态 # 发送其他请求 data_url = 'https://example.com/data' response = session.get(data_url) # 处理响应数据 if response.status_code == 200: data = response.json() # 进行数据处理和提取等操作 print(data) else: print("请求数据失败!") # 最后记得关闭session session.close() ``` 在这个示例中,我们使用了`requests`库来发送HTTP请求。首先创建一个`Session`对象,它会自动处理cookie和会话信息。然后,我们构造了登录请求的URL和表单数据,使用`session.post()`方法发送登录请求。如果返回的响应状态码为200,则表示登录成功。 接下来可以使用`session`对象进行其他请求,它会自动携带之前登录的会话信息。在示例中,我们发送了一个GET请求来获取数据,并对响应进行处理。 请注意,具体的登录方式和数据格式可能因网站而异,您需要根据目标网站的实际情况进行相应的调整和处理。 希望这个示例能帮到您,如果您有更多问题,请随时提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java劝退师、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值