demo1 网页采集器
import requests
url='https://www.baidu.com/s'
#对于url携带的参数:post请求封装到data字典里,get请求封装到params字典里。
#有一些参数是可有可无的,可以不必理会。
s=input('请输入查询内容:')
#url的参数
param={
'ie': 'UTF-8',
'wd': s
}
#header是UA伪装,伪装成浏览器。
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
#发起请求
r=requests.get(url,params=param,headers=header)
#将请求来的数据存入文件
filename=s+'.html'
with open(filename,'w',encoding='utf-8') as f:
f.write(r.text)
print(filename,'保存成功!')
生成的html代码文件:
通过浏览器打开后显示如下:
同样的,我们可以输入别的词汇进行尝试。
demo2 百度翻译
Ajax请求:
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。
局部页面刷新
从而确定目标 ==>捕获对应的Ajax请求
import requests
import json
#指定url
url='https://fanyi.baidu.com/sug'
#参数
s=input('请输入要查询的单词:')
dat={
'kw': s
}
#UA伪装
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
r=requests.post(url=url,data=dat,headers=header)
#只有确认响应数据是json类型的,才可以使用json()
print(r.json()) #返回一字典数据
#存储json文件
# fp=open(filename,'w',encoding='utf-8')
# json.dump(r.json(),fp=fp,ensure_ascii=False) #将r.json()数据存入文件fp中
# fp.close()
demo3豆瓣分类排行榜中数据
页面同样是一个Ajax请求。局部页面刷新
demo4药监总局
网页信息:(其中每个企业的名字都是一个链接,链接里是企业的详情数据)
Target: 得到所有企业的这些数据
我们需要得到所有这些企业的 < a href > 链接标签
我们又知道这些企业的名单信息还有< a href >标签都不能通过直接请求页面的 url 得到,都是动态加载数据。如:
直接请求页面信息:
其中并没有企业名单信息,因为他们都是动态加载数据。需要在XHR里边找。
找到其对应的数据:
由这些数据,我们可以得到这些企业的链接的一些参数 id 。
import requests
import json
#指定url
url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
#参数
dat={
'on': 'true',
'page': 1,
'pageSize': 15,
'productName':'',
'conditionType': 1,
'applyname':'',
'applysn':''
}
#UA伪装
header={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'}
r=requests.post(url=url,data=dat,headers=header)
link_data=r.json() #得到链接数据,返回的是一个字典类型
id_list=[] #存储企业的id信息
for i in link_data['list']: #i对应的列表的每一个元素都是一个字典
id_list.append(i['ID']) #将所有的id信息都存储起来
for i in id_list: #将所有企业的id信息打印出来
print(i)
其中, r. json()数据就是:
运行得到如下结果:
要的企业详情页数据同样也是一个动态加载数据:
#通过id信息来爬取数据
data_list=[] #所有企业的详情页数据
url2='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
for i in id_list:
data={
'id':i
}
r2=requests.post(url2,data=data,headers=header)
#data_list.append(r2.json()) #将每家企业的详情页数据都存到data_list列表里。
print(r2.json())
#持久化存储
# fp=open(filename,'w',encoding='utf-8')
# json.dump(data_list,fp=fp,ensure_ascii=False)
# fp.close()
最终得到了所有企业的详情页数据。