chrome网页视频抓取(文中代码滚动到底部时头条通过ajax更多文章(图))
优采云 发布时间: 2021-12-31 16:20chrome网页视频抓取(文中代码滚动到底部时头条通过ajax更多文章(图))
文中代码只是部分说明,完整代码放在文章的最后。
首先,实际感受一下我们想要捕捉到什么好处?点击今日头条,在搜索栏中输入“街拍”二字,点击任意一篇文章文章,里面的图片就是我们要抓取的内容。
可以看到搜索结果默认返回20篇文章。当页面滚动到底部时,标题通过ajax加载更多文章,在浏览器中按F12打开调试工具(我的是Chrome),点击网络选项,尝试加载更多文章,可以看到相关的http请求:
可以看到请求的URL(Request URL)为:,其请求参数为:
很容易猜到offset代表的是偏移量,也就是已经请求的文章的个数;format是返回格式,这里是json格式的数据;关键字是我们的搜索关键字;autoload 应该是自动加载的一个指标,无所谓;count 是请求的新 文章 的数量;_ 应该是请求发起时的时间戳。将请求的 URL 和这些查询参数结合起来,形成一个完整的请求 URL。比如这次的Request URL是:%E8%A1%97%E6%8B%8D&autoload=true&count=20&_=92。
我们先来看看这个请求为我们返回了什么样的数据。
导入json
从 pprint 导入 pprint
从 urllib 导入请求
url = ";format=json&keyword=%E8%A1%97%E6%8B%8D&autoload=true&count=20&_=92"
以 request.urlopen(url) 作为资源:
d = json.loads(res.read().decode())
打印(四)
这里我们首先通过request.urlopen(url)向这个url发送请求,返回的数据存放在res中,res是一个HttpResponse对象,实际返回的内容是通过调用其read方法获取的,因为read方法返回的是Python bytes 类型的字符串,调用其decode方法将其编码为字符串类型的字符串,默认为UTF-8编码。由于数据是以json格式返回的,所以通过json.load方法转换成Python字典形式。
打印出这个字典,可以看到字典中有一个键'data'对应一个由字典组成的列表的值。分析表明该值是所有文章的返回数据列表。稍微修改一下代码。看看'data'的值对应的是什么:
以 request.urlopen(url) 作为资源:
d = json.loads(res.read().decode())
d = d.get('数据')
打印(d)
在这里,pprint 用于使字典打印的值更加格式化,以便于分析。你可以看到这是一个字典列表。列表中的每一项代表一块文章,里面收录了文章的所有基本数据,比如标题、文章的URL等,这样我们就可以得到URL我们这次请求的所有 文章 的列表如下:
urls = [article.get('article_url') for article in d if article.get('article_url')]
这里使用了list comprehension,循环文章列表,通过get('article_url')获取文章的URL,加上if判断条件是为了防止文章因为缺失数据导致空的文章 @> 网址。我们将继续请求这些文章 URL,阅读它们的内容,并提取图片并将它们保存到我们的硬盘中。
我们先处理一个文章,看看如何提取文章中的所有图片。
只需点击一个文章链接,按F12查看网页源代码,可以看到文章的主体部分位于
在div里面。在这个div下面,有一个h1标签,代表文章的标题,还有一系列img标签,其src属性存储了图片所在的链接,所以我们通过访问这些链接下载图片,看到怎么做: