网页新闻抓取(【每日一题】如何爬取实际的新闻页面的具体内容观察)

优采云 发布时间: 2021-10-07 23:25

  网页新闻抓取(【每日一题】如何爬取实际的新闻页面的具体内容观察)

  前言

  前面的文章()主要是抓取首页的新闻列表而不是具体的新闻内容。本文将具体分析如何抓取实际新闻页面的具体内容

  

  观察图中的新闻列表,你会发现一共有三种新闻。点进去可以发现三个新闻的页面类型不同。这里只选择性抓取类似于第一条新闻的类型,其他两种抓取方式类似,大家可以自己实践一下--_--

  页面分析

  一条新闻的内容无外乎三种:视频、图片、文字。以下是收录所有三个内容供分析的页面,链接如下:

  

  打开控制台,视频一般会放在文章的顶部,id为tupian_div的div标签中(这里有坑,后面会讲...),文字会放在类left_zw的div标签在p标签中,图片会混在p标签中

  视频部分的抓取

  根据上一篇文章使用xpath解析html,视频主要在div下的source标签,尝试爬取地址

  

  显然是孤独的爬上去的。. .

  基本上可以判断视频是通过js动态加载的。如何处理这种情况会在下面的博客中讨论,因为内容还是比较大的。

  这里的解决方法:div下面的第三个script标签里面有一个视频地址,有点推测。

  

  提取视频地址的具体代码:

  videos = news_demo.xpath('//div[@id="tupian_div"]//script')

videos_script = str(videos[2].xpath('text()'))

videos_address = videos_script[videos_script.find('source') + 11:videos_script.find('type=video/mp4') - 1]

  这是针对有视频的新闻,所以需要判断新闻中是否有视频。

  具体内容和图片抓取

  ps = news_demo.xpath('//div[@class="left_zw"]/*')

for p in ps:

if len(p.xpath('img')) > 0:

print(p.xpath('img/@src')[0])

else:

if not p.xpath('text()'):

continue

for text in p.xpath('text()'):

print(text)

  应该没有太多代码来解释。xpath的语法在上一篇博客中。

  完整代码

  def get_real_news(href):

# 采用get方法获取响应

resp = requests.get(href)

# 为防止获取的网页乱码,对响应内容进行重新编码,编码格式可能是utf-8或gbk

html_content = resp.content.decode('utf-8', 'replace')

news_demo = html.etree.HTML(html_content)

# 视频链接爬取

videos = news_demo.xpath('//div[@id="tupian_div"]//script')

if len(videos) == 3: # 判断是否有视频

videos_script = str(videos[2].xpath('text()'))

videos_address = videos_script[videos_script.find('source') + 11:videos_script.find('type=video/mp4') - 1]

print(videos_address)

# 正文内容获取

ps = news_demo.xpath('//div[@class="left_zw"]/*')

for p in ps:

if len(p.xpath('img')) > 0: # 判断p标签中是否嵌入图片

print(p.xpath('img/@src')[0])

else:

if not p.xpath('text()'):

continue

for text in p.xpath('text()'):

print(text)

  完成

  

  总结

  这只是一个抓取新闻页面的例子。或许可以抓取部分同类型新闻页面,但无法保证每条新闻的内容都能被正确抓取。你还是需要足够的材料来试水,慢慢调试,提高复用性。

  我这里只抓取了正文内容。你可以尝试自己解析,也可以尝试爬取其他类型的新闻。您还可以尝试在获取内容时添加标签,例如强标签中的文本。, 那么如果要渲染网页上的内容,可以使用strong标签。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线