requests 模块

requests 模块

引入

  • 在python实现的网络爬虫中,用于网络请求发送的模块有两种,第一种为urllib模块,第二种为requests模块。urllib模块是一种比较古老的模块,在使用的过程中较为繁琐和不便。当requests模块出现后,就快速的代替了urllib模块,因此,在我们课程中,推荐大家使用requests模块。

使用requests流程

  • 指定url
  • 基于requests模块发起请求(get/post)
  • 获取响应对象中的数据值
  • 持久化存储

爬取搜狗首页整页数据

# 需求: 爬取sogou首页页面数据
import requests

# 1.指定url
url = 'https://www.sogou.com/'
# 2.发起请求
response = requests.get(url=url,verify=False) # 报错:提示需要证书认证,直接verify=False就好了
# 3.获取响应数据
page_text = response.text 
print(page_text)
# 4.持久化存储
with open('sougou.html','w',encoding='utf-8')as f:
    f.write(page_text)

借助sougou引擎做自定义查询

需要借助UA伪装

import requests

# UA(useragent)伪装,请求载体的身份标识
# 门户网站的服务器会检测对应请求的载体身份标识
# 如果请求载体身份标识为浏览器 --> 正常请求
# 如果非正常请求(爬虫),会被拒绝

# 0.UA伪装:让爬虫对应的载体身份标识伪装成浏览器
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 1.指定url
url = 'https://www.sogou.com/web?' # https://www.sogou.com/web?query=xx 就可以实现查询的网页
kw = input('请输入你要查询的内容>>> ')
param = {
    'query': kw
}	# 定义传入url的query参数
# 2.发起请求
response = requests.get(url=url,params=param,headers=headers,verify=False)
# 用上方的UA伪装header字典传入到get的headers参数中

# 3.获取响应数据
page_text = response.text
print(page_text)
# 4.持久化存储
with open(f'{kw}.html','w',encoding='utf-8')as f:
    f.write(page_text)

破解百度翻译

import requests
import json

# 0.UA伪装
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}
# 进入百度翻译网页, 根据F12-Network-Headers-reguest method 看到请求是post
# 1.指定url,根据F12-Network-Headers-reguest url 得到url
post_url = 'https://fanyi.baidu.com/sug'
# post请求参数处理
word = input('请输入要翻译的词>>>: ')
data = {
    'kw': word
}
# 2.发起请求
response = requests.post(url=post_url,data=data,headers=headers,verify=False)
# 3.获取响应数据
dic_obj = response.json() # text返回文本,如果响应数据是json类型,通过json()方法返回字典对象
print(dic_obj,type(dic_obj)) # dict
# 4.持久化存储
with open(f'{word}.json','w',encoding='utf-8')as f:
    json.dump(dic_obj,f,ensure_ascii=False)

豆瓣电影详情数据

import requests
import json

# 0.UA伪装
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 1.指定url,根据F12-Network-Headers-reguest url 得到url
url = 'https://movie.douban.com/j/chart/top_list?' #去掉?后面的参数
params = {
    'type': 24,
    'interval_id': '100:90',
    'action':'',
    'start': '0', #从第几部开始取
    'limit': 20 #一次取多少
}
# 2.发起请求
response = requests.get(url=url,params=params,headers=headers,verify=False)
# 3.获取响应数据
list_data = response.json() # text返回文本,如果响应数据是json类型,通过json()方法返回字典对象
print(list_data)
# 4.持久化存储
with open(f'douban.json','w',encoding='utf-8')as f:
    json.dump(list_data,f,ensure_ascii=False)

肯德基餐厅

import requests
import json
import pandas as pd

# 0.UA伪装
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

# 0.1 输入查询范围
store = input('请输入你要找到店的关键字>>>: ')
city = input('请输入你要找的店的城市>>>: (例如上海...)')

# 1.指定url,根据F12-Network-Headers-reguest url 得到url
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword' #去掉?后面的参数
data ={
    'cname': '',
    'pid': '',
    'keyword': store,
    'pageIndex': 1,
    'pageSize': 10,
}
# 2.发起请求
response = requests.post(url=url,data=data,headers=headers,verify=False)
# 3.获取响应数据
list_data = response.text # text返回文本
print(n := json.loads(list_data)) #直接通过json.loads转成字典,借助海象运算符赋值给n
for i in n:
    print(i) # 字典内有两个key,'Table','Table1',需要的内容存在'Table1'内
print(n_2 := n['Table1']) # 通过海象运算符,n_2
print(n_2)
# n_2 长这样 : 
# {'rownum': 1, 'storeName': '沪松DT', 'addressDetail': '松江荣乐东路1595号',
# 'pro': 'Wi-Fi,店内参观,礼品卡,溯源', 'provinceName': '上海市', 'cityName': '上海市'}
# 创建个空dataframe和空列表保存数据
df = pd.DataFrame([],columns=['storeName','addressDetail','provinceName']) 
store_list = []
address_list = []
provinceName_list = []
for j in n_2:
    if city in j['provinceName']:
        store_list.append(j['storeName'])
        address_list.append(j['addressDetail'])
        provinceName_list.append(j['provinceName'])
df.storeName = store_list
df.addressDetail = address_list
df.provinceName = provinceName_list
if df.empty:
    print('抱歉未找到记录')
else:print(df)
# 4.持久化存储
df.to_excel(f'{city}-{store}-kfc店地址明细.xlsx',index=None,freeze_panes=(1,0))

国家药品总监管理总局化妆品生产许可证相关信息

需要处理动态加载的数据

# 网址
# http://scxk.nmpa.gov.cn:81/xk/

import requests
import json
import pandas as pd

# 0.UA伪装
headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}

post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'

id_list = [] #存放企业id的list
#获取15页中的企业id们
for page in range(1,15):
    page = str(page)
    data = {
        'on': 'true',
        'page': page,
        'pageSize': 15,
        'productName':'' ,
        'conditionType': 1,
        'applyname': '',
        'applysn': '',
    }
    response = requests.post(url=post_url,data=data,headers=headers,verify=False)
    # 3.获取响应数据
    print(json_id := response.json())
    print(json_id_list := json_id['list'])
    for i in json_id_list:
        print(i['ID'])
        id_list.append(i['ID'])

#获取企业详情数据
all_data_lst = []
post_url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for id in id_list:
    data={
        'id':id
    }
    response = requests.post(url=post_url,data=data,headers=headers,verify=False)
    detail_json = response.json()
    # print(detail_json)
    all_data_lst.append(detail_json)
# print(all_data_lst)
with open('化妆品信息.txt','a',encoding='utf-8')as f:
    for i in all_data_lst:
        content = i['epsName'] + '\t' + i['epsProductAddress'] + '\t' + i['legalPerson'] + '\n'
        f.write(content)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值