自动采集数据(08数据采集:如何自动化采集数据?重点介绍抓取1.)
优采云 发布时间: 2021-11-21 12:07自动采集数据(08数据采集:如何自动化采集数据?重点介绍抓取1.)
08 数据采集:如何自动化采集数据?
专注于用爬虫爬取1.Python爬虫
1) 使用请求来抓取内容。我们可以使用Requests库来抓取网页信息。 Requests库可以说是Python爬虫的强大工具,也就是Python的HTTP库。通过这个库从网页中抓取数据非常方便,可以为我们节省很多时间。
2) 使用 XPath 解析内容。 XPath 是 XML Path 的缩写,是 XML 路径语言。它是一种用于确定 XML 文档某一部分位置的语言,在开发中经常用作小型查询语言。 XPath 可以通过元素和属性进行位置索引。
3)使用 Pandas 来保存数据。 Pandas 是一种先进的数据结构,使数据分析更容易。我们可以使用 Pandas 来保存爬取的数据。最后通过Pandas写入XLS或MySQL等数据库。 Requests、XPath 和 Pandas 是 Python 的三个强大工具。当然,Python爬虫有很多强大的工具,比如Selenium、PhantomJS,或者Puppeteer的headless模式。 ##在这里练习
2.爬虫工具
1)优采云采集器
2)优采云
3)吉搜客
09数据采集:如何使用优采云采集微博“D&G”评论
优采云傻瓜式软件,操作起来很方便,比python爬虫更容易上手
10 Python爬虫:如何自动下载王祖贤海报?
python爬虫笔记介绍了使用urlretrieve下载xpath的非结构化数据,参考:爬虫3-python爬取非结构化数据下载到本地
本教程介绍了来自 JSON 和 Xpath 的补充
如何使用JSON数据自动下载王祖贤的海报
我们这里使用的url:%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页需要爬取更多,我们可以把图片下载写成控制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\']) # 下载一张图片
/default/index/img?u=aHR0cHM6Ly9pbWcyMDIwLmNuYmxvZ3MuY29tL2Jsb2cvMTQxNTQyMC8yMDIxMDEvMTQxNTQyMC0yMDIxMDExNjEyMTgzNjI5MS01NjI5ODgzMzQucG5n
如何使用XPath自动下载王祖贤的电影海报封面
JSON 数据格式的数据结构非常清爽,可以通过 Python 的 JSON 库进行解析。
但是有时候,网页会使用JS来请求数据,所以只有在加载JS之后,我们才能得到完整的HTML文件。 XPath 可以帮助我们在不受加载限制的情况下定位到我们想要的元素。
在讲义中,推荐使用XPath Helper插件获取Xpath路径。在浏览器中可以使用f12打开开发者模式,点击页面元素查看xpath。您还可以通过在 HTML 中右键单击来复制和粘贴 xpath 路径。详情请参考爬虫相关博文。
有时候我们直接用Requests获取HTML,发现我们想要的XPath并不存在。这是因为HTML还没有加载,所以你需要一个工具来模拟网页加载,然后给你完整的HTML,直到加载完成。在Python中,这个工具是Selenium库(这里暂时不涉及)。