网页抓取qq(如何寻找异步文件以及抓取内容的坑网页的文件)

优采云 发布时间: 2021-09-19 23:16

  网页抓取qq(如何寻找异步文件以及抓取内容的坑网页的文件)

  1.问题描述

  最近,由于学习内容的要求,我们需要从网页上抓取一些数据进行分析报告。在阅读了Python crawler的一些基础知识后,我们可以直接开始网站爬升数据。作为新手,踩坑是不可避免的。最近,我遇到了一个难题:

  通常,您需要抓取网页上标签上的内容。通过urllib下载网页内容后,您可以通过beautifulsup对象解析网页内容,然后可以使用fina\uAll()方法查找所需的标记内容

  例如,我想捕获QQ音乐分类歌曲列表下的所有歌曲列表信息。分解任务后,应为:

  抓取当前页面的歌曲列表信息;翻开新的一页;判断它是否是最后一页。如果不是最后一页,请返回步骤1。如果是最后一页,请结束爬虫程序

  首先,编写一个简单的代码来捕获单个页面上所有歌曲的标题:

  import urllib

from bs4 import BeautifulSoup

url = https://y.qq.com/portal/playlist.html

html = urllib.urlopen(url)

bsObj = BeautifulSoup(html)

playTitle_list = bsObj.find_all("span", {"class": "playlist__title_txt"}) # 抓取该页面歌单标题并保存在列表中

print(playTitle_list)

for playTitle in playTitle_list: # 输出所有标题

print(i.get_text())

  对于标记参数,您可以通过右键单击网页以检查网页属性来查找歌曲列表标题信息。属性类的值是playlist_utitle_uutxt,但是在执行代码之后,输出结果只是一个空列表,这不是很奇怪吗?作为一个新手,我真的花了很长时间绞尽脑汁,不知道为什么

  在那之后,我和我的同学交流,听他谈论他以前见过的异步加载内容。我发现它与我抓取的网页的功能有点相似,所以我去寻找答案

  流行的描述是,异步加载的网页显示的内容都来自当前网址表示的网页文件,并且当前网页文件通过对另一个网页内容的函数调用加载了一些内容,即,要抓取的内容所属的网页文件确实与当前网页文件不同,因此我无法抓取它。因此,您需要找到捕获内容真正属于的文件

  2.溶液

  接下来,我们将介绍如何查找异步加载的文件以及在获取过程中可能遇到的坑

  1.右击网页,选择**检查,在调试界面中找到“网络”选项,然后逐个查找JS文件(记得刷新网页,否则JS文件不会显示),通过预览检查内容是否为您想要爬升的内容**

  

  2.在每个JS文件的特定信息面板中,您可以通过预览查看传递的内容,我们找到歌曲列表标题信息的源文件,然后通过headers属性找到该信息的真实源文件的链接,并将URL作为我们的请求参数

  

  headers属性下的general和request标头收录我们想要的信息。general属性下的URL还收录值传递类型。下面是get

  因此,我们可以通过请求模块获取歌曲列表信息,这里需要注意的是,网页的request headers值应该传递给requests模块的get方法,否则无法获取网页

  import requests

url = ...

headers ={...} # headers信息要以字典的形式保存

jsContent = requests.get(url).text

  3.一般来说,上面的处理过程会获取JSON对象(好像是字典的字符串表示),在Python中,可以直接使用JSON模块将JSON对象转换成Python对象-字典,从而通过键获取数据

  jsDict = json.loads(jsContent)

  但是,有时获取的数据表单会将JSON对象名称添加到JSON对象中,例如:

  playList({...}) # 其中{}表示json对象内容

  在这种情况下,无法通过JSON模块转换数据类型,通常会发生异常

  json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

  对于这个异常,可以通过字符串片段截取JSON对象信息,然后通过JSON模块转换数据类型(这是我提出的一个傻瓜式方法。如果一个大个子知道一个更正式的方法,我希望纠正它)(っ • ̀ω•́) っ✎⁾⁾ )

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线