08 数据采集:如何自动化采集数据?

重点介绍爬虫做抓取
1.Python 爬虫
1)使用 Requests 爬取内容。我们可以使用 Requests 库来抓取网页信息。Requests 库可以说是 Python 爬虫的利器,也就是 Python 的 HTTP 库,通过这个库爬取网页中的数据,非常方便,可以帮我们节约大量的时间。
2)使用 XPath 解析内容。XPath 是 XML Path 的缩写,也就是 XML 路径语言。它是一种用来确定 XML 文档中某部分位置的语言,在开发中经常用来当作小型查询语言。XPath 可以通过元素和属性进行位置索引。
##这里可以实践一下
2.抓取工具
1)火车采集器
2)八爪鱼
3)集搜客
09 数据采集:如何用八爪鱼采集微博上的“D&G”评论

八爪鱼傻瓜软件,操作非常方便,比python爬虫更容易上手用
10 Python爬虫:如何自动化下载王祖贤海报?
python爬虫笔记中介绍了用urlretrieve可以下载xpath的非结构化数据,参考:爬虫3-python爬取非结构化数据下载到本地
这篇教程是从JSON和Xpath来介绍补充
如何使用 JSON 数据自动下载王祖贤的海报
这里我们用的url:https://www.douban.com/j/search_photo?q=%E7%8E%8B%E7%A5%96%E8%B4%A4&limit=20&start=0(这里给出的是json的链接。有时候显示会有细微不同,方法是:用Chrome浏览器的开发者工具,可以监测出来网页中是否有json数据的传输),打开JSON格式的,解析发现结构是:
{"images":
[{"src": …, "author": …, "url":…, "id": …, "title": …, "width":…, "height":…},
…
{"src": …, "author": …, "url":…, "id": …, "title": …, "width":…, "height":…}],
"total":26069,"limit":20,"more":true}不如先用第一个页面上手来个下载小例子:
# -*- coding: utf-8 -*
import requests
import json
query = '王祖贤'
url = 'https://www.douban.com/j/search_photo?q=' + 'query' + '&limit=20&start=0'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000 "
}
html = requests.get(url, headers=headers).text # 得到返回结果,是一个json格式
response = json.loads(html, encoding='utf-8') # 将 JSON 格式转换成 Python 对象
i=0
for image in response['images']:
print(i)
img_src = image['src'] #image是一个dict
pic = requests.get(img_src, timeout=10) #这时候image其实是动态页面 XHR 数据。还需要再请求对应的url
filename='C:/Users/.../image_json_test/'+str(i)+'.jpg'
fp=open(filename,'wb') #'b一般处理非结构化如图片,wb有文件则覆盖,无文件则新增'
fp.write(pic.content) #注意这里content
fp.close()
i+=1
这里我们只爬取了20张图片,从上面的json串:"total":26069,"limit":20,"more":true我们知道总数量26069,每20张分页,要爬取更多,我们可以将图片download写成幻术,控制url翻页循环:
import requests
import json
query = '王祖贤'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) "
"Chrome/69.0.3497.81 Safari/537.36 Maxthon/5.3.8.2000 "
}
def download(src, id): # 图片下载函数
filename = 'C:/Users/luxia/PycharmProjects/shujuyunying/image_json_test/' + str(id) + '.jpg'
try:
pic = requests.get(src, timeout=10)
f = open(filename, 'wb')
f.write(pic.content)
f.close()
except requests.exceptions.ConnectionError:
print('图片无法下载')
''' for 循环 请求全部的 url '''
for i in range(20, 26069, 20):
url = 'https://www.douban.com/j/search_photo?q=' + query + '&limit=20&start=' + str(i)
html = requests.get(url, headers=headers).text # 得到返回结果
response = json.loads(html, encoding='utf-8') # 将 JSON 格式转换成 Python 对象
for image in response['images']:
img_src = image['src'] # 当前下载的图片网址
download(img_src, image['id']) # 下载一张图片如何使用 XPath 自动下载王祖贤的电影海报封面
JSON 的数据格式数据结构很清爽,通过 Python 的 JSON 库就可以解析。
但有时候,网页会用 JS 请求数据,那么只有 JS 都加载完之后,我们才能获取完整的 HTML 文件。XPath 可以不受加载的限制,帮我们定位想要的元素。
讲义中推荐使用XPath Helper 插件获取Xpath路径,其中在浏览器 中可以用f12开启开发者模式点选页面元素查看xpath,在HTML中右键也可以复制粘贴xpath路径,具体可以参考爬虫相关的博文。
有时候当我们直接用 Requests 获取 HTML 的时候,发现想要的 XPath 并不存在。这是因为 HTML 还没有加载完,因此你需要一个工具,来进行网页加载的模拟,直到完成加载后再给你完整的 HTML。在 Python 中,这个工具就是 Selenium 库(这里暂时不涉及)。
















