python利用requests自定义user-agent爬取网站

       前一段写了一个爬取墨迹天气的小爬虫,今天突然发现不能用了,因为是墨迹天气,反爬机制应该没有那么严格,应该解决一下user-agent的问题就可以了,写这篇博客,说一下requests的自定义user-agent的方式。

首先登录你想要爬取的网站:
python利用requests自定义user-agent爬取网站

我使用的是Chrome,按F12或者右键检查,进入开发者工具,点击network,可以看到,下面是空的:

python利用requests自定义user-agent爬取网站

然后随便点击一下,比如,点击一下今天,可以看到发送的数据包:

python利用requests自定义user-agent爬取网站

任意点击一个数据包,然后在右侧headers选项中,找到user-agent:
python利用requests自定义user-agent爬取网站

接下来就是代码实现了,看下面代码
url = 'https://tianqi.moji.com/weather/china/henan/'+city
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.89 Safari/537.36'}
cook = {"Cookie":'BAIDUID=FE0F97F1FC37C47792091A2523CD945F:FG=1; HMACCOUNT=CC6D0E280C842123'}
response = requests.get(url, cookies=cook, headers=headers).content
     url定义要爬取网址,然后headers是user-agent,cook是cookie,cookie就是你登录一个网页时提交的密码,密码向网页提交的登陆数据,简单来说,cookie就是制作一个假身份骗过海关.
    利用get函数提交url、cookies和headers
然后接下来就可以肆无忌惮爬取你想要的数据了。

      当然网站会有很多的反爬机制,需要随机应变,至于为什么要使用我写的这个办法爬取网站,是因为很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

### 自定义 HTTP 请求中的 User-Agent 头信息 #### 使用 Python 的 `requests` 库设置 User-Agent Python 中可以利用 `requests` 库轻松地向 HTTP 请求添加自定义User-Agent 字段。 ```python import requests url = 'https://httpbin.org/user-agent' headers = { 'User-Agent': 'MyCustomUserAgent/1.0' } response = requests.get(url, headers=headers) print(response.json()) ``` 此代码片段展示了如何创建带有特定 User-Agent 的 GET 请求并打印响应结果[^1]。 #### 利用 PHP 设置 AJAX 请求中的 User-Agent 对于基于 jQuery 发起的 AJAX 调用,可以通过 XMLHttpRequest 对象的方法 setRequestHeader 来更改 User-Agent: ```javascript $.ajax({ url: "test.html", beforeSend: function(xhr){ xhr.setRequestHeader('User-Agent', 'MyCustomUserAgent/1.0'); }, success: function(data){ console.log(data); } }); ``` 上述 JavaScript 代码实现了在发起 AJAX 请求前修改其 User-Agent 属性的功能[^2]。 #### Java HttpClient 设置 User-Agent 实现浏览器仿真 Java 开发人员可借助 Apache HttpClient 类库实现对 User-Agent 的定制化配置。 ```java import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; public class Main { public static void main(String[] args) throws Exception { try (CloseableHttpClient httpClient = HttpClients.createDefault()) { HttpGet request = new HttpGet("https://httpbin.org/get"); request.setHeader("User-Agent", "MyCustomUserAgent/1.0"); HttpResponse response = httpClient.execute(request); System.out.println(response.getStatusLine().getStatusCode()); } } } ``` 这段程序说明了怎样运用 Java 编写客户端应用程序以指定不同的 User-Agent 进行网络请求[^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值