目录
案例6:爬取国家药监总局中化妆品生产许可证相关数据(后续更新)
1、基础简介
requests模块:python中原生的一款基于网络请求的模块。功能强大且使用起来简单便捷效率极高。
作用:模拟浏览器发发请求。
2、使用方法
- 指定url(以字符串的形式指定)
- 发起请求
- 获取响应数据
- 持久化存储(存储的是响应数据)
3、实战
案例1:爬取网站首页
#conding:utf-8
##需求:爬取百度网页首页
import requests
if __name__ == "__main__":
#step1:指定url
url = 'https://www.baidu.com/'
#step2:发起请求
response = requests.get(url=url)
#step3:获取响应数据.text返回的是字符串形式的响应数据
page_data = response.text
print(page_data)
#step4:持久化存储
with open('./baidu.html','w',encoding='utf-8') as fp:
fp.write(page_data)
fp.close()
案例2:简易网页采集器
#conding:utf-8
##需求:爬取搜索内容
#User-Agent(请求载体的身份标识)
#UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求和载体身份标识为某一款浏览器则会通过
#说明和这个请求是一个正常的请求,但如果检测到的请求载体身份标识不是基于某一款浏览器的,则表示该请求为不正常请求(爬虫)
#服务器端就很有可能拒绝该次请求
#UA伪装:让爬虫对应的请求载体身份标称伪装成某一款浏览器
import requests
if __name__ == '__main__':
# UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
}
url = 'https://www.sogou.com/web'
#处理url携带的参数:封装到字典中
kw = input('请输入需要搜索的关键字:')
param = {
'query':kw
}
#对指定的url发起携带参数的请求,并且请求过程中处理了参数
response = requests.get(url=url,params=param,headers=headers)
page_data = response.text
filename = kw+'.html'
with open(filename,'w',encoding='utf-8') as fp:
fp.write(page_data)
fp.close()
print(filename,'保存成功!')
案例3:破解百度翻译
注:AJAX相当于异步 JavaScript 和 XML,它是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面
#conding:utf-8
##需求:爬取百度翻译翻译某单词后的局部数据
import requests,json
if __name__ == '__main__':
#step1:指定url
post_url = 'https://fanyi.baidu.com/sug'
#step2:进行UA封装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
}
#step3:post请求参数处理(同get一致)
word = input('请输入需要翻译的英语单词:')
data = {
'kw':word
}
#step4:请求发送
response = requests.post(url=post_url,data=data,headers=headers)
#step5:获取相应数据 :json()方法返回的是obj(如果确认相应数据是json类型的才可以使用json方法进行对象的返回)
dic_obj = response.json()
#step6:持久化存储
filename = word+'.josn'
fp = open(f'./{word}.json','w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)
fp.close()
print('翻译完成!!!')
案例4:爬取豆瓣电影分类排行榜电影详情
#conding:utf-8
##需求:爬取豆瓣电影网页某类电影的详情
import requests,json
if __name__ == '__main__':
#step:获取url并封装参数
url = 'https://movie.douban.com/j/chart/top_list'
param = {
'type':'24',
'interval_id':'100:90',
'start':'0',
'limit':'20'
}
#step2:进行UA封装
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
}
#step3:请求发送
response = requests.get(url=url,params=param,headers=headers)
#step4:获取相应数据 :json()方法返回的是obj(如果确认相应数据是json类型的才可以使用json方法进行对象的返回)
dic_obj = response.json()
#step5:持久化存储
fp = open('./douban.json','w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)
print('爬取完成')
案例5:爬取某城市肯德基餐厅位置
#conding:utf-8
##需求:查询某城市肯德基位置
import requests,json
if __name__ == '__main__':
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0'
}
city = input('请输入需要查询的城市:')
for i in range(1,11):
param = {
'cname':'',
'pid':'',
'keyword':city,
'pageIndex':i,
'pageSize':'10'
}
print('正在提取第' + str(i) + '页数据')
response = requests.get(url=url,params=param,headers=headers)
dic_obj = response.text
print(dic_obj)
fp = open(city+'.json','w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii=False)