chrome网页视频抓取(文中代码滚动到底部时头条通过ajax更多文章(图))

优采云 发布时间: 2021-12-31 16:20

  chrome网页视频抓取(文中代码滚动到底部时头条通过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属性存储了图片所在的链接,所以我们通过访问这些链接下载图片,看到怎么做:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线