通过编写程序,模拟浏览器上网,然后让其在互联网上抓取数据的过程
可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取
爬虫程序也可以通过制定相应的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站中的相关数据
规定了网站中哪些数据可以被爬虫爬取哪些数据不可以被爬取
python中原生的一款基于网络请求的模块,功能强大,简单便捷,效率极高
作用:模拟浏览器发请求
pip install requests
#网页采集器
import requests
# UA:User-Agent(请求载体的身份标识)
# UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的身份标识为某一款浏览器,
# 说明该请求正常请求,但是如果检测到的不是浏览器标识,说明是爬虫,则服务器可能拒绝该次请求
# UA伪装:爬虫请求载体的身份标识伪装成浏览器
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
url = 'https://www.sogou.com/web'
#处理url携带的参数:封装到字典中
kw=input('enter a word:')
param ={
'query':kw
}
#发起请求的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,'保存成功')
# 百度翻译
# post请求,携带了参数,响应数据是json数据
import requests
import json
if __name__ == "__main__":
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
post_url = 'https://fanyi.baidu.com/sug'
#post请求参数处理
words = input('input words:')
data={
'kw':words
}
response = requests.post(url=post_url,data=data,headers=headers)
#json方法返回json对象
dic_obj = response.json()
#持久化存储
fp = open(words+'.json','w',encoding='utf-8')
json.dump(dic_obj,fp=fp,ensure_ascii = False)
fp.close()
print('over!')
# 每种类型爬取排行前十的电影
import requests
import json
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
}
url = 'https://movie.douban.com/j/chart/top_list?'
moves = []
for type in range(1,32):
type = str(type)
param = {
'type': type,
'interval_id': '100:90',
'action': '',
'start': '0',
'limit': '10'
}
response = requests.get(url=url, params=param, headers=headers).json()
move = {
'type':type,
'content':response
}
moves.append(move)
# json.dumps()可以将列表(字典)类型转换为json字符串
json.dumps(moves)
with open('./moves.json', 'w', encoding='utf-8') as fp:
json.dump(moves, fp=fp, ensure_ascii=False)
print('over!')