爬虫第一天
requests
requests 模块:python 中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高。
作用:模拟浏览器发送请求。
如何使用: (requests模块的编码流程)
- 指定url
- 发起请求(get或post的请求)
- 获取响应数据
- 持久化存储响应数据
安装requests
windows:
pip intstall requests
抓个搜狗首页数据(get)
import requests
if __name__ == "__main__":
# step-1:指定url
url1 = 'https://www.sogou.com/'
# step-2:发起请求
response = requests.get(url=url1)
# step-3:获取响应数据
page_text = response.text
print(page_text)
# step-4:持久化存储
with open('./sougou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
print("爬取数据结束!")
按照requests的基本流程完成操作。
做一个简单的搜狗搜索的搜集器
import requests
# 实现一个就简单的搜狗网页采集器
# UA检测指 user-anger 表示时发出请求的载体,当服务器检测到载体时爬虫时,会拒绝访问,
# 所以我们需要伪装自己,使用UA伪装,爬虫使用自己浏览器的身份标识去发送请求
if __name__ == "__main__":
header = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36'
}
# step-1:指定url,headers 制作请求url以及伪装自己
url1 = 'https://www.sogou.com/web'
# 处理url的参数,:封装到字典中
kw = input('enter a word:')
param ={
'query':kw
}
#step-2 发起请求:对指定的服务器发起的请求对应的url时携带参数的,并且请求过程中处理了参数
response = requests.get(url=url1,params=param,headers=header)
# step-3:获取响应数据
page_text = response.text
# step-4:持久化存储
fileName = kw + ".html"
#encoding='utf-8'为了使获取的数据中的中文正常显示可读,防止出现乱码
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,"保存成功!!!")
这里我们持久化存储中为保证保存后的文件的可读性,添加保存文件的命名规则,自动的存储。
破解一下百度翻译
import requests
import json
# 实现一个就简单的搜狗网页采集器
# UA检测指 user-anger 表示时发出请求的载体,当服务器检测到载体时爬虫时,会拒绝访问,
# 所以我们需要伪装自己,使用UA伪装,爬虫使用自己浏览器的身份标识去发送请求
if __name__ == "__main__":
post_url = 'https://fanyi.baidu.com/sug'
header ={
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36'
}
kw1 =input("enter a word:")
data1={
'kw':kw1
}
response = requests.post(url=post_url,data=data1,headers=header)
# json()方法返回的是一个obj (如果确认响应数据是一个json数据,才能使用json()方法)
dic_boj = response.json()
# 要实时的根据抓包数据的响应包反馈的数据类型选择json或text...等等
print(dic_boj)
# 持久化存储
fileName = kw1 +'.json'
fp = open(fileName,'w',encoding='utf-8')
json.dump(dic_boj,fp=fp,ensure_ascii=False)
print('爬取结束!!!')
这里我们需要配合抓包工具配合使用,进行分析定位请求的url ,携带的数据 响应的数据包。
(chrom可以使用F12 调出抓包分析,也可以使用工具fiddler、HTTPAnalyzerFullV7.6.4 、鲨鱼等等专业抓包工具,这里的话我们使用chrom自带的就可以足够使用了。)
chrom自带的 需要定位到network选项,由于翻译网页的时是Ajax的请求类型。所以我们只需要定位XHR的请求响应数据包即可,(所有的话定位比较慢)如下
同时我们要对比response 的返回内容来定位具体那个数据包是我们需要的。
携带的data在下面这里就不截图了。
再来一个豆瓣电影抓一下
同样使用抓包工具分析请求地址 类型 data
import requests
if __name__ == "__main__":
url1 = 'https://movie.douban.com/j/chart/top_list'
param = {
'type':'24',
'interval_id':'100:90',
'action':'',
'start':'0',#表示从库中第几部电影去取
'limit':'100',#表示一次取几个
}
header ={
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Mobile Safari/537.36'
}
response = requests.get(url=url1,params=param,headers=header)
list_data = response.json()
# 持久化存储
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('爬取结束!!!')