python中使用pyquery获取属性的问题
代码如下:import requests
from pyquery import PyQuery
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
request = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers)# 函数赋值
result = request.text
doc = PyQuery(result)
a = doc(".item .pic img")
c = a.attr("alt")
print(c)
我想获取页面上所有的类选择器item 下面类选择器pic 下 img标签,img标签中的所有alt属性,该怎么写呢?
上述代码只能获取到第一个值,也就是肖申克的救赎, 然后我大致看了一下网页的结构,属性alt的结构都是一致的,为什么只能获取到第一个alt属性的值呢? 你好,对于PyQuery库来说,当你使用`.attr("属性名")`方法时,它只会返回匹配到的第一个元素的属性值,不会返回所有匹配到的元素的属性值。
要获取页面上所有的类选择器`.item`下面类选择器`.pic`下的`img`标签中的所有`alt`属性,可以使用`.items()`方法遍历所有匹配到的元素,然后分别获取它们的`alt`属性。代码如下:
import requests
from pyquery import PyQuery
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
request = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers)
result = request.text
doc = PyQuery(result)
a_list = doc(".item .pic img").items()# 获取所有匹配到的元素
for a in a_list:
c = a.attr("alt")# 获取每个元素的alt属性
print(c)
这样就能够打印出所有匹配到的`img`标签的`alt`属性值了。希望对你有帮助!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-6 16:48
你好,对于PyQuery库来说,当你使用`.attr("属性名")`方法时,它只会返回匹配到的第一个元素的属性值,不会 ...
doc = PyQuery(result)
a = doc(".item .pic img")
c = a.attr("alt").items()
for i in c:
print(i)
为什么这样写报错了呢?
AttributeError: 'str' object has no attribute 'items' python小小白哟 发表于 2024-02-06 16:58
doc = PyQuery(result)
a = doc(".item .pic img")
...
抱歉,这是因为`.attr("alt")`返回的是一个字符串,而字符串对象没有`items()`方法。要获取所有匹配到的元素属性值,可以直接通过`a`对象进行遍历并打印出来。代码如下所示:import requestsfrom pyquery import PyQueryheaders ={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"}request = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers)result = request.textdoc = PyQuery(result)a = doc(".item .pic img")for img in a: c = img.attrib["alt"]# 获取每个元素的alt属性 print(c)这样,就可以打印出所有匹配到的`img`标签的`alt`属性值了。希望这次能够解决你的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 来个人吧 AI回答的不是太明白 python小小白哟 发表于 2024-02-06 17:03
来个人吧 AI回答的不是太明白
当使用`PyQuery`的`.attr("属性名")`方法时,它只会返回匹配到的第一个元素的属性值,不能获取所有匹配到的元素的属性值。要获取所有匹配到的元素的属性值,可以使用`.items()`方法来遍历匹配到的元素,并分别获取它们的属性值。
在你的代码中,`a = doc(".item .pic img")` 返回的是一个字符串对象,而字符串对象没有`items()`方法,因此出现了错误`AttributeError: 'str' object has no attribute 'items'`。
为了解决这个问题,你可以通过直接遍历选择器来获取每个匹配到的元素的属性值。代码如下:
import requests
from pyquery import PyQuery
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
request = requests.get("https://movie.douban.com/top250?start=0&filter=", headers=headers)
result = request.text
doc = PyQuery(result)
a = doc(".item .pic img")
for item in a:
c = PyQuery(item).attr("alt")
print(c)
这样就能够打印出所有匹配到的`img`标签的`alt`属性值了。每次循环取出的`item`都是一个 `PyQuery` 对象,可以通过`.attr("属性名")`方法获取其属性值。
希望这次能够解决你的问题!如果还有其他疑问,请随时提出。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-2-6 17:03
当使用`PyQuery`的`.attr("属性名")`方法时,它只会返回匹配到的第一个元素的属性值,不能获取所有匹配 ...
大致有点明白了,是不是把获取到的内容存储到items中,然后遍历一下,获取属性的值呢?是这个意思吗? python小小白哟 发表于 2024-02-06 17:05
大致有点明白了,是不是把获取到的内容存储到items中 ...
对的,你理解得很正确!通过 `doc(".item .pic img")` 选择器获取到的匹配元素会存储在一个 `items` 对象中,可以使用 `.items()` 方法将其转为可遍历的对象。然后你可以遍历这个对象,在每次循环中使用 `PyQuery(item)` 将每个元素转换为 `PyQuery` 对象,进而可以使用 `.attr("属性名")` 方法获取其属性值。这样就可以依次获取到每个匹配元素的属性值了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 pyquery没研究过,抱歉解决不了这个问题
但lxml应该可以解决你的需求,也很好上手,很强大 青出于蓝 发表于 2024-2-6 17:07
pyquery没研究过,抱歉解决不了这个问题
但lxml应该可以解决你的需求,也很好上手,很强大
你好版主大大 最近在研究pyquery,所以希望用pyquery解决上述问题。 本帖最后由 阿奇_o 于 2024-2-6 19:05 编辑
CSS选择器,会用的话,就这样。。a piece of code 。。
for i in range(1, 26):
selector = f"#content > div > div.article > ol > li:nth-child({i}) > div > div.pic > a > img"
item = doc(selector)
print(item.attr('alt'), item.attr('src')) 青出于蓝 发表于 2024-2-6 17:07
pyquery没研究过,抱歉解决不了这个问题
但lxml应该可以解决你的需求,也很好上手,很强大
import requests
from pyquery import PyQuery
headers ={
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36 Edg/121.0.0.0"
}
request = requests.get("https://movie.douban.com/top250?start=0&filter=",headers=headers)# 函数赋值
result = request.text
doc = PyQuery(result)
a = doc(".item .pic").remove("em")
cc = PyQuery(a)
dd = cc(".pic a img").items()
for i in dd:
print(i.attr("alt"))
解决掉了上述代码 使用pyquery完美提取内容。
页:
[1]