从零开始学习爬虫,一步一步走下去,最终完成项目实战,成为爬虫高手,就关注下本人,带你们走向爬虫高手,下面是简单基础讲解的requests一些知识,作为一个标记,记载自己成长。
简单搜狗页面下载
# python 3
# encoding = utf-8
# author = fog
# requests 模块:python中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高
# 作用:模拟浏览器发请求。
# 如何使用(requests模块的代码流程):1.指定url 2.发起请求 3.获取响应数据 4.持久化储存
# 爬取搜狗首页的页面数据
import requests
if __name__ == "__main__":
# step1 指定url
url = 'https://www.sogou.com/'
#step2 发起请求
#get 方法会返回一个响应对象
response = requests.get(url=url)
#step3 获取响应数据 .text返回的是字符串形式的响应数据
page_text = response.text
print(page_text)
#step4 持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
print('爬取数据结束!!')
简易网页抓取器
# python 3
# encoding = utf-8
# author = fog
#ua伪装:
#ua:user-agent(请求载体的身份标识)
#ua检测:门户网站的服务器会检测对应请求得载体身份标识,如果检测到请求是载体身份为某一款浏览器
#说明该请求是一个正常得请求,如果检测到请求身份标识不是基于某一款浏览器,则表示该请求为不正常大的请求
#(爬虫),则服务器端就很可能拒绝该次请求。
#ua伪装:让爬虫对应得请求载体身体标识伪装成一款浏览器
import requests
if __name__ == '__main__':
#ua伪装:将对应的user-agent封装成为一个字典
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
url = 'https://www.sogou.com/web?'
#处理url携带的参数:封装到字典中
kw = input('enter word:')
param = {
'query':kw
}
#对指定的url发起请求对应的url是携带参数的,并且请求过程中处理了参数
response = requests.get(url = url,params = param,headers = headers)
page_text = response.text
filename = kw + '.html'
with open (filename,'w',encoding = 'utf-8') as fp:
fp.write(page_text)
print(filename,'保存成功!!')
爬取肯德基查询地点
# python 3
# encoding = utf-8
# author = fog
#
import requests
import json
if __name__ == '__main__':
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
op = input('enter city:')
param = {
'cname':'',
'pid':'',
'keyword': op,
'pageIndex': '1',
'pageSize': '10',
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
response = requests.post(url = url,params = param,headers =headers)
dic_data = response.json()
fp = open('./kfc.json','w',encoding = 'utf-8')
json.dump(dic_data,fp,ensure_ascii = False)
print('over!!!')
豆瓣电影详情数据
# python 3
# encoding = utf-8
# author = fog
#首先先观察豆瓣请求,用json数据来表示
#ua伪装
#
import requests
import json
if __name__ == '__main__':
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type': '24',
'interval_id': '100:90',
'action':'',
'start': '0', #库中取电影数的开始
'limit': '20', #一次性取电影的个数
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
response = requests.get(url = url,params = param,headers = headers)
#观察数据类型,列表还是字典
list_data = response.json()
#持久化存储
fp = open('./douban.json','w',encoding = 'utf-8')
json.dump(list_data,fp,ensure_ascii = False)
print('over!!!!')
百度翻译
# python 3
# encoding = utf-8
# author = fog
# 需求:破解百度翻译
# -post请求(携带了参数)
# -响应数据是一组json数据
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.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
#3.post 请求参数处理(同get请求一样)
word = input('enter a word:')
data = {
'kw': word
}
#4.请求发送
response = requests.post(url = post_url,data = data,headers = headers)
#5.获取wordf响应数据,json()方法返回的一个ojb(如果确认响应数据是json类型才使用json一个对象返回)
dic_ojb = response.json()
#6.进行持久化存储
filename = word +'.json'
fp = open(filename,'w',encoding = 'utf-8')
json.dump(dic_ojb,fp = fp,ensure_ascii = False)
print('over!!')
药监局监督管理相关数据
# python 3
# encoding = utf-8
# author = fog
# 动态加载页面数据
# 首页中对应的企业信息数据是通过ajax动态请求到的。
# 通过对详情页url的观察发现:
# url的域名都是一样的,只有携带的参数(id)不一样
# id值可以从首页对应的ajax请求到的json串中获取
# 域名和id值拼接处一个完整的企业对应的详情页的url
# 详情页的企业数据也是动态加载出来的
# 所有的post请求的url都是一样的,只有参数id值是不同的。
# 如果我们可以批量获取多家企业的id,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求的url
import requests
import json
import time
if __name__ == '__main__':
#批量获取不企业的id值
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
# ua伪装
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
}
id_list = [] # 储存企业的id
all_data_list = [] # 存储所有的企业详情数据
#参数的封装
for page in range(1,300):
page = str(page)
data = {
'on':' true',
' page':' 1',
' pageSize':' 15',
' productName':'',
' conditionType':' 1',
' applyname':'',
' applysn':'',
}
json_ids = requests.post(url = url,headers = headers,data = data).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])
time.sleep(2) #请求过多,用睡眠来调整
# 获取企业详情数据
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
data = {
'id':id
}
detail_json = requests.post(url = post_url,headers = headers,data = data).json()
all_data_list.append(detail_json)
#持久化存储all_data_list
fp = open('./shengwuxinxi.json','w',encoding = 'utf-8')
json.dump(all_data_list,fp = fp,ensure_ascii = False)
print('over!!')