我看过其他漂亮的汤也有同样的问题。好像我的有点不同。
这是http://engine.data.cnzz.com/main.php?s=engine&uv=&st=2014-03-01&et=2014-03-31网站
我想把那张桌子放在右边。注意表的第一行是如何展开成该数据的详细分解的。我不想要那些数据。我只想要最高级的数据。您还可以看到,其他行也可以展开,但在本例中是不行的。因此,只循环和跳过tr[2]可能不起作用。我试过这个:
r = requests.get(page)
r.encoding = 'gb2312'
soup = BeautifulSoup(r.text,'html.parser')
table=soup.find('div', class_='right1').findAll('tr', {"class" : re.compile('list.*')})但是在其他级别上还有更多的嵌套list*。怎样才能拿到第一层呢?
发布于 2014-04-24 14:00:28
仅通过将table设置为False将搜索限制为指向 argument元素的子元素:
table = soup.find('div', class_='right1').table
rows = table.find_all('tr', {"class" : re.compile('list.*')}, recursive=False)发布于 2014-04-24 14:14:36
@MartijnPieters的解决方案已经很完美了,但是不要忘记,BeautifulSoup允许您在定位元素时也使用多个属性。请参阅下列代码:
from bs4 import BeautifulSoup as bsoup
import requests as rq
import re
url = "http://engine.data.cnzz.com/main.php?s=engine&uv=&st=2014-03-01&et=2014-03-31"
r = rq.get(url)
r.encoding = "gb2312"
soup = bsoup(r.content, "html.parser")
div = soup.find("div", class_="right1")
rows = div.find_all("tr", {"class":re.compile(r"list\d+"), "style":"cursor:pointer;"})
for row in rows:
first_td = row.find_all("td")[0]
print first_td.get_text().encode("utf-8")注意我是如何添加"style":"cursor:pointer;"的。这对于顶级行是唯一的,而不是内部行的属性。这与公认的答案是相同的结果:
百度汇总
360搜索
新搜狗
谷歌
微软必应
雅虎
0
有道
其他
[Finished in 2.6s]希望这也有帮助。
https://stackoverflow.com/questions/23270805
复制相似问题