我试过bs4,select方法不行
我的代码有什么问题?
import requests
import bs4
def main():
r = requests.get("http://nodejs.org/download/")
soup = bs4.BeautifulSoup(r.text)
selector = "div.interior:nth-child(2) > table:nth-child(2) > tbody:nth-child(1) > tr:nth-child(1) > td:nth-child(3) > a:nth-child(1)"
print(soup.select(selector)[0].text)
if __name__ == "__main__":
main()
最佳答案
此页面上的答案与在浏览器中查看和使用 bs 解析不同。 查看您的 r.text 并从那里解析。
响应类似于
<div class="interior row">
<div id="installers">
<ul>
<li>
<a href="http://nodejs.org/dist/v0.10.26/node-v0.10.26-x86.msi">
<img alt="" height="50" src="http://nodejs.org/images/platform-icon-win.png" width="45">
Windows Installer
<small>node-v0.10.26-x86.msi</small>
</img></a>
</li>
<li>
<a href="http://nodejs.org/dist/v0.10.26/node-v0.10.26.pkg">
<img alt="" height="50" src="http://nodejs.org/images/platform-icon-osx.png" width="45">
Macintosh Installer
<small>node-v0.10.26.pkg</small>
所以这里没有 table 。 希望这会有所帮助。
编辑: 我的代码如下以获得此响应:
def main():
r = requests.get("http://nodejs.org/download/")
soup = bs4.BeautifulSoup(r.text)
# print r.text
selector = "div.interior"
print(soup.select(selector)[2])
编辑 2: 你可以用 find 试试看。你对那个更灵活。
soup = bs4.BeautifulSoup(r.text)
print(soup.find("a", text="64-bit"))
编辑 3: 这应该有效:
def main():
r = requests.get("http://nodejs.org/download/", headers={"content-type":"text", "User- Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"})
soup = bs4.BeautifulSoup(r.text)
print(soup.find("table").tr.td.findNextSibling().a['href'])
关于python - 带有 beautifulsoup4 的 CSS 选择不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22603502/