Requests
Requests 继承了urllib的所有特性。Requests支持HTTP连接保持和连接池,支持使用cookie保
持会话,支持
文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。
requests 的底层实现其实就是 urllib,Requests的文档非常完备,中文文档也相当不错。Requests能完全满足当前网络的需求,支持Python 2.6–3.5,而且能在PyPy下完美运行。
开源地址:https://github.com/kennethreitz/requests
中文文档 API:http://docs.python-requests.org/zh_CN/latest/index.html
安装Requests
$ pip install requests
安装好了之后现在就可以编写代码了。
需求1
使用get请求爬取百度贴吧Java类的前一百页数据保存到本地.
# get请求方式
requests.get(url, .headers)
1.先打开百度贴吧,找到对应网址以及分页的规律
# 网址域名/f?kw=关键字&ie=编码格式&pn=页码数量(行号)
https://tieba.baidu.com/f?kw=java&ie=utf-8&pn=0
1.然后F12=>NetWork=>查看网址=>Request Headers中的User-Agent,并且复制出来
代码如下:
import requests
# 获取贴吧1000页数据
class TiebaSpider(object):
# 实例化
def __init__(self, tieba_name):
self.tieba_name = tieba_name
# 贴吧网址
self.tieba_url = “https://tieba.baidu.com/f?kw=” + tieba_name+ “&ie=utf-8&pn={}”
# User-Agent:模仿浏览器请求使用的
self.headers = {
“User-Agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36”}
# 构造url裂变
def get_url_list(self):
# 由于现实的pn第一页等于0,第二页等于50,也就是每一页数据就是多50,所以直接使用推导式循环100次然后将pn值为50,100,150,200
return [self.tieba_url.format(i * 50) for i in range(100)]
# 发送请求,获取响应
def parse_url(self, url):
response = requests.get(url, headers=self.headers)
# 获取html数据并且解码
return response.content.decode()
# 保存html地址
def save_html(self, html_data, pagenum):
# 将文件写入硬盘
file_path = “{}-第{}页.html”.format(self.tieba_name, pagenum)
with open(file_path, “w”, encoding=“utf-8”) as f:
f.write(html_data)
def run(self):
# 获取要爬虫的所有页面地址
url_list = self.get_url_list()
# 循环列表,模仿浏览器访问百度贴吧
for url in url_list:
# 发送请求
html_data = self.parse_url(url)
# 写入硬盘
page_index = url_list.index(url) + 1
self.save_html(html_data, page_index)
print(“第{}页完成”.format(page_index))
if __name__ == “__main__”:
tieba = TiebaSpider(“java”)
tieba.run()
好啦,这就写完了,最简单的一个爬虫入门.
需求2
使用post请求爬取百度翻译来做一个自己翻译软件。由于网页版的百度翻译有一个sign: 456989.137772参数时动态的,而app版的没有,所以直接爬取app版的。
#post请求
requests.post(url, data, headers)
直接贴代码:
import requests
# 百度翻译
class FanyiSpider(object):
def __init__(self, values):
self.data = {
“query”: values,
“from”: “zh”,
“to”: “en”,
}
self.headers = {
“user-agent”: “Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1”
}
self.temp_url = “https://fanyi.baidu.com/basetrans”
def post(self):
response = requests.post(self.temp_url, data=self.data,headers=self.headers)
return response.content.decode()
def run(self):
# 发送请求
data_json = self.post()
print(data_json)
if __name__ == “__main__”:
value = input(“请输入要翻译的数据:”)
fanyi = FanyiSpider(value)
fanyi.run()
以上就是入门级的源码,比较简单,其实爬虫过多的困难都在与怎么找到请求的规律和网址。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试