Web crawler PyQuery html如何选择(第二个标记,第n个子项) a=''
'' 从pyquery导入pyquery html=PyQuery(a) 1.问题 我尝试获取第二个值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)').
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')