Web crawler PyQuery html如何选择(第二个标记,第n个子项) a=''

Web crawler PyQuery html如何选择(第二个标记,第n个子项) a='' ,web-crawler,pyquery,Web Crawler,Pyquery,'' 从pyquery导入pyquery html=PyQuery(a) 1.问题 我尝试获取第二个值c-5678- html('v')[1].attr('c') 这将显示错误“HtmlElement”对象没有属性“attr” 那我该怎么做呢 2.问题 我试图找到如何解决第一个问题,但我遇到了另一个问题 html('p:n子(1)').attr('id')) 我得了A html('p:nth child(2)').attr('id')) 我得到了 html('p:nth child(3)').

'' 从pyquery导入pyquery html=PyQuery(a) 1.问题

我尝试获取第二个值
c-5678-

html('v')[1].attr('c')

这将显示错误“HtmlElement”对象没有属性“attr”

那我该怎么做呢

2.问题

我试图找到如何解决第一个问题,但我遇到了另一个问题

html('p:n子(1)').attr('id'))

我得了A

html('p:nth child(2)').attr('id'))

我得到了

html('p:nth child(3)').attr('id'))

我什么也得不到

“B”和“C”在哪里

我想

html('p:nth child(2)')。attr('id')
将获得“B”

html('p:nth child(3)').attr('id')
将获得'C'

html('p:nth child(4)')。attr('id')
将获得“D”


但这是错误的

你陷入了一种常见的困惑。jQuery也经常出现这种情况

虽然html是PyQuery对象,但html('v')返回HtmlElement-s(非PyQuery对象)的列表。为了对其调用PyQuery方法,需要再次将其包装到PyQuery中。对于你的问题1,你必须重写如下:

a='''
<p id="A" class="hello beauty"></p>
<v id="XXX" c=1234>
<p id="B" class="beauty"></p>
<v id="YYY" c=5678>
<p id="C" class="beauty" ></p>
<p id="D" class="beauty" ></p>'''

from pyquery import PyQuery
html = PyQuery(a)
'<p id="A" class="hello beauty"/>\n<v id="XXX" c="1234">\n<p id="B" class="beauty"/>\n<v id="YYY" c="5678">\n<p id="C" class="beauty"/>\n<p id="D" class="beauty"/></v></v>'
至于您的第二个问题,添加PyQuery包装器将无法获得所需的结果。这是因为如果执行
html.html()
以查看呈现的代码,您将获得:

PyQuery(html('v')[1]).attr('c')
您想要做的事情可以通过以下方式实现:

PyQuery(html('p:nth-child(3)')).attr('id')
PyQuery(html('p:nth-child(4)')).attr('id')
请注意,这些索引都少了一个,因为它们是列表索引,因此

人们可能会感到困惑的是,
PyQuery(html('p:nth child(2)')).attr('id')
实际上返回“D”。这是因为相应的
是最里面的
`中的第二个子项。这是一个可以让你对它有更好感觉的页面

PyQuery(html('p:nth-child(3)')).attr('id')
PyQuery(html('p:nth-child(4)')).attr('id')
PyQuery(html('p')[1]).attr('id')
PyQuery(html('p')[2]).attr('id')
PyQuery(html('p')[3]).attr('id')