鱼C论坛

 找回密码
 立即注册
查看: 1698|回复: 6

pyquery提取网页中的数据问题

[复制链接]
发表于 2023-8-22 10:30:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 python小小白哟 于 2023-8-22 10:36 编辑

我只想提取第一个span的class为title的text文本
微信截图_20230822102757.jpg

微信截f57.jpg


代码如下:

from pyquery import PyQuery
import requests

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}

resp = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers).text
pq = PyQuery(resp)
c = pq.find("span.title")
aaa = c.items()
for i in aaa:
    print(i.text())



我修改了这几行代码就报错了:
aaa = c.items()
for i in aaa[0]:
    print(i.text())


TypeError: 'generator' object is not subscriptable
请问该怎么修改代码呢?



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-22 10:31:14 | 显示全部楼层
问题描述:

在使用pyquery提取网页数据时,只想提取第一个span标签中class为title的文本内容。

解决方案:

根据你提供的代码,你可以使用以下方法来修改代码以提取第一个span标签的文本内容:
from pyquery import PyQuery
import requests

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}

resp = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers).text
pq = PyQuery(resp)
c = pq.find("span.title")
first_span_text = c.eq(0).text()
print(first_span_text)

在这个例子中,我们使用了 eq(0) 方法来选择第一个匹配的元素,并使用 text() 方法提取其文本内容。

希望这个解决方案对你有帮助!如果你有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-22 10:31:35 | 显示全部楼层
您想要使用PyQuery从网页中提取第一个class为"title"的span标签的文本。在您给出的代码中,有一些错误导致了TypeError。

您可以按照以下方式修改代码:
from pyquery import PyQuery
import requests

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"}
resp = requests.get("https://movie.douban.com/top250?start=0&filter=", headers=headers).text

pq = PyQuery(resp)
c = pq("span.title:first")  # 选择第一个class为"title"的span标签
text = c.text()  # 获取文本内容

print(text)

这里的修改主要在以下几点:

1. 将pq.find("span.title")修改为pq("span.title:first"),使用CSS选择器选择第一个class为"title"的span标签。

2. 直接使用c.text()获取文本内容。

请注意,PyQuery中的选择器语法与CSS选择器类似,可以使用常见的CSS选择器语法来选择特定的元素。在这个例子中,我们使用:first伪类选择器来选取第一个匹配的元素。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-22 10:35:05 | 显示全部楼层
isdkz 发表于 2023-8-22 10:31
问题描述:

在使用pyquery提取网页数据时,只想提取第一个span标签中class为title的文本内容。

不好意思说错了  是提取整个页面的所有第一个span标签类为title的文本内容。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-22 10:37:32 | 显示全部楼层
陶远航 发表于 2023-8-22 10:31
您想要使用PyQuery从网页中提取第一个class为"title"的span标签的文本。在您给出的代码中,有一些错误导致 ...

不好意思说错了  是提取整个页面的所有第一个span标签类为title的文本内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-22 10:42:19 | 显示全部楼层
python小小白哟 发表于 2023-8-22 10:37
不好意思说错了  是提取整个页面的所有第一个span标签类为title的文本内容。

不是单独提取第一个span标签,是整个页面所有的span标签的第一个text内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-22 10:55:44 | 显示全部楼层
python小小白哟 发表于 2023-8-22 10:37
不好意思说错了  是提取整个页面的所有第一个span标签类为title的文本内容。

你好!你想要从一个页面中提取所有第一个<span>标签类为"title"的文本内容,但是在修改代码时遇到了错误。错误提示是TypeError: 'generator' object is not subscriptable,这是因为你正在尝试对生成器对象进行下标操作,但生成器并不支持这种操作。

为了修复这个问题,你可以直接遍历生成器对象,而不是尝试通过下标访问。这里是修复后的代码:
from pyquery import PyQuery
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}

resp = requests.get("https://movie.douban.com/top250?start=0&filter=", headers=headers).text
pq = PyQuery(resp)
c = pq.find("span.title")

for i in c.items():
    print(i.text())
在这个修复后的代码中,我直接遍历了生成器对象c.items(),然后输出每个元素的文本内容。这样就可以正确地提取出所有第一个<span>标签类为"title"的文本内容了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表