import requests
# 使用方法\ request的编码流程
# 指定url
# 发起请求
# 获取相应数据
# 持久化存储
# unit1
url1='https://www.sogou.com/'
data=requests.get(url=url1)
result1=data.text
print(len(result1))
# unit2
url2='https://www.sogou.com/web?'
# 处理url携带的参数:封装到字典
# UA伪装
headers_firefox={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
kw=input('enter a word:')
param={
'query':kw
}
data=requests.get(url=url2,params=param,headers=headers_firefox)
result2=data.text
filename=kw +'.html'
with open(filename,'w',encoding='utf-8') as fp:
fp.write(result2)
print(filename,'保存成功')
# unit3 百度翻译
# 实战巩固
# ——需求:破解百度翻译
# ——POST请求(携带了参数)
headers_google={
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'}
post_url3='https://fanyi.baidu.com/sug'
# post请求和get请求一样
word=input('enter a word:')
data={
'kw':word
}
response1=requests.post(url=post_url3,data=data,headers=headers_google)
dict_obj=response1.json()
# json返回的是obj(如果确定服务器响应类型是json类型的,才可以使用json)
print(dict_obj)
# 持久化存储
import json
filename=word+'.json'
fp=open(filename,'w',encoding='utf-8')
json.dump(dict_obj,fp=fp,ensure_ascii=False)
print('fanyi___over')
# unit4
# 爬取豆瓣电影中的详情数据
# 阿贾克斯请求
post_url4='https://movie.douban.com/j/chart/top_list'
param={
'type': '20',
'interval_id': '100:90',
'action':' ',
'start': '1',#从第几个电影考试取
'limit': '20',#一次取出多少个
}
response2=requests.get(url=post_url4,params=param,headers=headers_google)
list_data=response2.json()
fp=open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('douban___over')
项目案例4:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证的相关数据
import requests
import re
import json
"""
项目案例4:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证的相关数据
"""
headers_firefox={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
"""
# with open('./1.html','w',encoding='utf-8') as fp:
# fp.write(data)
# print('over')
从此可以发现有些数据是动态加载过来的(例如阿贾克斯数据)
发现首页中对应的企业信息数据是通过ajax动态请求到的
通过对详情页的观察发现:url域名是一样的,只有携带的参数(id)不是一样的
id可以从首页中对应的ajax请求到的json串中获取
域名和ID拼接处一个完整企业对应的url
详情页的数据也是动态加载过来的
发现所有post请求的URL都是一样的,只有参数id是不同的
可以批量获取多家企业的id,然后合并id和url获得所需要的数据
"""
# 第一步:批量获取ID地址
url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
# 参数的封装
id_list = []
for page in range(0,25):
page=str(page)
param={
'on': 'true',
'page': page,
'pageSize':'15',
'productName':' ',
'conditionType':'1',
'applyname':' '
}
json_ids=requests.post(url=url,data=param,headers=headers_google).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])
# id结合url 获取企业详情数据
post_url="http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
all_datalist=[]
for id in id_list:
data={
'id':id
}
detail_json=requests.post(url=post_url,headers=headers_google,data=data).json()
all_datalist.append(detail_json)
fp=open('./alldata.json','w',encoding='utf-8')
json.dump(all_datalist,fp=fp,ensure_ascii=False)
print(len(all_datalist))
print('over')
百度翻译
import requests
post_url='https://fanyi.baidu.com/sug'
kw=input("please input a word:\n")
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
data={
'kw':kw
}
data=requests.post(post_url,data=data)
filename=kw+'.html'
with open(filename,'w',encoding='utf-8') as fp:
fp.write(data.text)
print('end')