BeautifulSoup选择表

时间:2014-11-10 10:51:23

标签: python web-scraping beautifulsoup

在网站上有几张桌子。我想选择其中一个,这是我的问题。 我写的时候:

g_data=soup.find_all("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"}) 

它只找到了我的第7号表格,但是当我写下来时:

html_1=("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"})   
g_data=soup.find_all(html_1)

它找到所有表(从表1到表7)。有什么不同?为什么第二种解决方案无效?我想只使用表nr 7并将其变成一个函数,所以我需要第二个解决方案正常工作。 所有代码:

from bs4 import BeautifulSoup
import requests

r=requests.get("http://www.filmweb.pl/serial/Synowie+Anarchii-2008-479538/episodes#sezon7")
soup=BeautifulSoup(r.content)
html_1=("table",{"class":"awT votegroup votegroup7 wH episodesList"}, {"id":"sezon7"})
g_data=soup.find_all(html_1)
print g_data

1 个答案:

答案 0 :(得分:3)

您传入的搜索参数不正确。您必须将这些内容合并到一个字典中,而不是使用元组:

soup.find_all("table", {"class":"awT votegroup votegroup7 wH episodesList", "id":"sezon7"})

这有效,但只有只是; class与列表匹配(因为class属性中的类的顺序并不重要);你不需要它,因为你已经有id匹配。

由于您只查找一个表,请使用soup.find()

soup.find("table", id="sezon7")

您的搜索基本上是在寻找名称table{"class":"awT votegroup votegroup7 wH episodesList"}{"id":"sezon7"}的任何元素,因为您只传递了{的元组{1}}过滤。

如果你想将它包装成一个函数,你可以只使用变量而不是字符串文字:

name