python之爬虫requests模块
通过requests块进行访问URL(统一资源定位符)
一般爬虫步骤
- 指定url
- 发起请求
- 获取响应数据
- 持久化储存
import requests
import bs4
# 通过requests块进行访问URL(统一资源定位符)
if __name__ =="__main__":
#首先指定URL
url ="http://www.sogou.com/"
# 2.发起请求
# get方法会返回一个响应对象
response = requests.get(url=url)
# 3.获取响应数据,text返回的是以字符串的响应形式数据
page_text = response.text
# 持久化储存
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
print("爬取数据结束!!!")
升级版一般爬虫步骤
没错,你的爬虫升级了
- 指定url
- 进行UA伪装(升级后所带属性)
- 发起请求
- 获取响应数据
- 持久化储存
UA伪装的解释
UA:User-Agent(请求载体的身份标识)
UA检测:门户网站的服务器会检测对应的载体身份标识,如果检测到请求的载体身份为某一款浏览器说明该请求是一个正常的请求。但是,若检测到请求的载体身份
不是基于浏览器,则表示该请求为不正常的请求(爬虫),则服务器端就有可能能拒绝该次请求UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
实例1:通过url爬取百度翻译
import requests
import json
if __name__ == "__main__":
# 1.指定URL
post_url ="https://fanyi.baidu.com/sug"
# 2.进行UA伪装
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.37 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
# 3.post请求参数处理
query = input("输入你要翻译的单词:")
data = {
'kw': query
}
# 4.发起请求
response =requests.post(url=post_url,data=data,headers=headers)
#5.获取响应数据,(json()方法返回的是obj)
obj_json=response.json()
# 6.持久化储存
filename ='./'+query+'.json'
fp = open(filename,'w',encoding='utf-8')
json.dump(obj=obj_json,fp=fp,ensure_ascii=False)
#ensure_ascii表示的意思是是否要转为ASCII码,如果打开(默认打开True),那么转 #为json后中文会变成ASCII编码,如果关闭后中文还是中文,不会变为ASCII编码。
# indent表示间隔的长度,
print("完成")
实例2:爬取豆瓣电影
import requests
import json
if __name__ == "__main__":
# 1.获取URL
url ="https://movie.douban.com/j/new_search_subjects?"
# 2.进行UA伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.37 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'
}
# 3.post请求参数处理
start=1
param = {
'sort': 'U',
'range': '0, 10 ',
'tags': '',
'start': start
}
respnose =requests.get(url=url,params=param,headers=headers)
list_datas=[]
list_datas.append(respnose.json())
#range(value) ,其中value可通过input输入,这个是爬取n+1次(因为前面已经爬取一次了),当然,这段也可以删除
for i in range(3):
start += 20#再次爬取从第 start 开始取电影
param = {
'sort': 'U',
'range': '0, 10 ',
'tags': '',
'start': start
}
respnose = requests.get(url=url, params=param, headers=headers)
list_datas.append(respnose.json())
filename ="./dataFile/电影排行榜.json"
fp = open(filename,'w',encoding="utf-8")
json.dump(list_datas,fp=fp,ensure_ascii=False)
#ensure_ascii表示的意思是是否要转为ASCII码,如果打开(默认打开True),那么转 #为json后中文会变成ASCII编码,如果关闭后中文还是中文,不会变为ASCII编码。
# indent表示间隔的长度,
print("Over!!!")
2020 10 10
时间长了可能用不了