崩溃了news.163.com(求解)

作者在使用BeautifulSoup解析网易新闻时遇到困难,尝试了多次请求、更换解析器和调整xpath,最终发现直接复制网站结构代码可以成功获取内容,但XPath解析依然存在问题。
摘要由CSDN通过智能技术生成

崩溃了news.163.com(求解)

今天在测试学习的BeautifulSoup的时候,找到了news.163.com网易云新闻网,发现它的内容是加载在html里的,再尝试使用bs4获取下面这部分内容的时候。

分析过程:

​ 1.第一次怀疑自己请求到的内容不对。✖

​ 2.第二次请求其他节点。✖

​ 3.第三次尝试更换解析器。✖

​ 4.第四次拷贝出element节点,存储到html文件中解析。✔

​ 5.第五次使用xpath。✖

有谁知道这是为什么,可以评论区分享一下吗?
在这里插入图片描述

先看了它的html代码结构发现它每一个文章内容都是在一个div里的。
在这里插入图片描述

初始代码:
import requests
from bs4 import BeautifulSoup


url = 'https://news.163.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'lxml')
print(soup.find_all('div', class_='news_title'))
第一次尝试

我以为我没有请求到正确的内容,又检查了一下请求的text

import requests
from bs4 import BeautifulSoup


url = 'https://news.163.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
print(response.text.find('news_title'))  # 此处返回的不是-1。

soup = BeautifulSoup(response.text, 'lxml')
print(soup.find_all('div', class_='data_row news_article clearfix '))  # 空列表
第二次尝试

看了一下感觉可能是自己xpath里的语句有问题因为里面class属性带空格可能没识别到,又往下找到了一层找到了一个div class="news_title"存储标题的。

在这里插入图片描述

很遗憾结果还是不正确!!!
import requests
from bs4 import BeautifulSoup


url = 'https://news.163.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
print(response.text.find('data_row'))

soup = BeautifulSoup(response.text, 'lxml')
print(soup.find_all('div', class_='news_title'))  # 依然是空的
第三次尝试

bing搜索了一下,发现多数的回复都是说解析器使用错了,然后又试了lxmlhtml5lib

依旧不行!!!

第四次尝试

拷贝出它的那段结构代码。
在这里插入图片描述

发现这样是可以正常请求出来的。
在这里插入图片描述

第五次尝试

切换到xpath,先使用了chrome浏览器的插件Xpath Helper,可以正常获取到内容。
在这里插入图片描述

嵌入代码:

import requests
from lxml import etree


url = 'https://news.163.com/'

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36',
}

response = requests.get(url, headers=headers)
print(response.text.find('data_row'))


html = etree.HTML(response.text)
print(html.xpath('//div[@class="news_title"]/h3/a/text()'))		# 依然是空的!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爬虫探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值