再来回顾一下爬虫的五个步骤:
- 1.需求分析
- 2.寻找网址
- 3.下载网站的返回内容(需要用到:requests)
- 4.通过网站的返回内容找到需要爬取的数据(需要用到:正则表达式re,XPATH-lxml)
- 5.存储找到的数据内容(需要用到:MySQL)
步骤1、2、3前面已经总结过了,这篇看看步骤4、5
步骤4:通过网站的返回内容找到需要爬取的数据
我们以百度翻译为例:
浏览器中访问百度翻译,按F12或在Fn+F12,点击Network,刷新页面,点击XHR,输入**“童”,点击sug**
将Headers放大看:
上图可以看到,页面的request URL,以及请求方式为POST,而不是前面的GET,两者的区别可看前文,以及Header中增加了一项Form Data
所以我们在pycharm中练习获取百度翻译后的结果:
import requests
import json
url = "https://fanyi.baidu.com/sug" # 页面的request URL
form = {"kw":"童"} # 请求方式为POST时,需要提交的form data
# 这里需要使用POST的方法
response = requests.post(url,verify = False,data = form)
# 定位数据(爬虫第四步)
print(response.text) # 是字符串类型
# json包中的函数loads可以将输入的字符串(str)转换为字典类型(dict)
json_dict = json.loads(response.text) # 转换数据类型
print(json_dict) # 这时就变成了dict类型
translated = json_dict["data"][0]["v"] # 就是“童”字,翻译后的结果
# 爬虫的第五步,打印或者保存数据
print("翻译后的内容是: ",translated)
# 输出: 第一行是字符串类型,第二行是转换后的字典类型,第三行是结果
{"errno":0,"data":[{"k":"\u7ae5","v":"[t\u00f3ng] \u540d child; young servant; \u5f62 virgin; bald; bar"},{"k":"\u7ae5\u5e74","v":"[t\u00f3ng ni\u00e1n] childhood;"},{"k":"\u7ae5\u8bdd","v":"[t\u00f3ng hu\u00e0] children's stories; fairy tales;"},{"k":"\u7ae5\u8bdd\u6545\u4e8b","v":"fairy tale; Fairy Tales; FAIRY STORIES;"},{"k":"\u7ae5\u88c5","v":"[t\u00f3ng zhu\u0101ng] children's garments;"}]}
{'errno': 0, 'data': [{'k': '童', 'v': '[tóng] 名 child; young servant; 形 virgin; bald; bar'}, {'k': '童年', 'v': '[tóng nián] childhood;'}, {'k': '童话', 'v': "[tóng huà] children's stories; fairy tales;"}, {'k': '童话故事', 'v': 'fairy tale; Fairy Tales; FAIRY STORIES;'}, {'k': '童装', 'v': "[tóng zhuāng] children's garments;"}]}
翻译后的内容是: [tóng] 名 child; young servant; 形 virgin; bald; bar