赞
踩
对于大多数网站来说,如果网站发现你是爬虫程序,会禁止你的访问,从而让你获取不到你想要的数据。所以,我们要尽可能的伪装自己,像是真人从浏览器访问访问的一样。
动态设置请求头headers(User-Agent)(随机切换User-Agent,模拟不同用户的浏览器信息)
使用IP地址池:VPN和代理IP,现在大部分网站都是根据IP来ban的
Cookies
设置延迟下载(防止访问过于频繁,设置为2秒或更高)
urllib.request.Request是urllib的一个抽象类,用于构造一个http请求对象实例。
request类Request方法常用的内置方法:
Request.add_data(data)设置data参数,如果一开始创建的时候没有给data参数,那么可以使用该方法追加data参数;
Request.get_method() 返回HTTP请求方法,一般返回GET或是POST;
Request.has_data() 查看是否设置了data参数;
Request.get_data() 获取data参数的数据;
Request.add_header(key, val) 添加头部信息,key为头域名,val为域值;
Request.get_full_url() 获取请求的完整url;
Request.get_host() 返回请求url的host(主域名);
Request.set_proxy(host, type) 设置代理,第一个参数是代理ip和端口,第二个参数是代理类型(http/https)。
简单代码示例
- # 导入urllib库
- import urllib.parse
- import urllib.request
-
- # 声明定义请求头
- headers = {
- # 在这个头字典里面可以将你所有需要传递的头添加进来
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
- }
-
- # 向指定的url发送请求,并返回
- post_url = 'https://fanyi.baidu.com/sug'
- # 传入参数
- form_data = {
- 'kw': 'honey'
- }
- # 格式化参数
- form_data = urllib.parse.urlencode(form_data).encode()
- # 创建Request类
- req = urllib.request.Request(url=post_url, headers=headers, data=form_data)
-
- # 进行请求,打印结果
- ret = urllib.request.urlopen(req)
- print(ret.read())
爬虫示例
爬取拉勾网Python职位招聘信息(由于拉勾网进行了防爬,访问其接口需要传递Cookie,本人直接在浏览器复制出来写入到请求头中的)。
- # 引入urllib库
- import urllib.parse
- import urllib.request
-
- # 声明定义请求头
- h
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。