python小小白哟 发表于 2023-8-22 10:30:45

pyquery提取网页中的数据问题

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

我只想提取第一个span的class为title的text文本





代码如下:


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:
    print(i.text())


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



isdkz 发表于 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() 方法提取其文本内容。

希望这个解决方案对你有帮助!如果你有任何疑问,请随时提问。

陶远航 发表于 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伪类选择器来选取第一个匹配的元素。
如果问题已经解决,请设置最佳答案

python小小白哟 发表于 2023-8-22 10:35:05

isdkz 发表于 2023-8-22 10:31
问题描述:

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


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

python小小白哟 发表于 2023-8-22 10:37:32

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

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

python小小白哟 发表于 2023-8-22 10:42:19

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

不是单独提取第一个span标签,是整个页面所有的span标签的第一个text内容

陶远航 发表于 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"的文本内容了。
页: [1]
查看完整版本: pyquery提取网页中的数据问题