有人可以帮我解析一下吗?我遇到了很多麻烦。我正在解析来自site的信息。
以下是几行代码,它们从具有2个标题和4个值的表中提取数据:
for x in soup.findAll(attrs={'valign':'top'}):
print(x.contents)
make_list = x.contents
print(make_list[1]) #trying to select one of the values on the list.
当我尝试使用make_list[1]
行打印时,会出错。但是,如果我拉出最后两行,我会以列表格式获得我想要的html,但我似乎无法将各个行分开或过滤它们(以取出html标记)。有人可以帮忙吗?
以下是输出示例,我想在此处具体说明。我不确定正确的正则表达式:
['\n', <td align="left">Western Mutual/Residence <a href="http://interactive.web.insurance.ca.gov/companyprofile/companyprofile?event=companyProfile&doFunction=getCompanyProfile&eid=3303"><small>(Info)</small></a></td>, '\n', <td align="left"><div align="right"> 355</div></td>, '\n', <td align="left"><div align="right">250</div></td>, '\n', <td align="left"> </td>, '\n', <td align="left">Western Mutual/Residence <a href="http://interactive.web.insurance.ca.gov/companyprofile/companyprofile?event=companyProfile&doFunction=getCompanyProfile&eid=3303"><small>(Info)</small></a></td>, '\n', <td align="left"><div align="right"> 320</div></td>, '\n', <td align="left"><div align="right">500</div></td>, '\n']
答案 0 :(得分:0)
如果您尝试解析该网站的结果,则以下内容应该有效:
from bs4 import BeautifulSoup
html_doc = ....add your html....
soup = BeautifulSoup(html_doc, 'html.parser')
rows = []
tables = soup.find_all('table')
t2 = None
# Find the second from last table
for t3 in tables:
t1, t2 = t2, t3
for row in t1.find_all('tr'):
cols = row.find_all(['td', 'th'])
cols = [col.text.strip() for col in cols]
rows.append(cols)
# Collate the two columns
data = [cols[0:3] for cols in rows]
data.extend([cols[4:7] for cols in rows[1:]])
for row in data:
print "{:40} {:15} {}".format(row[0], row[1], row[2])
这使我的输出看起来像:
Company Name Annual Premium Deductible
AAA (Interinsurance Exchange) (Info) N/A 250
Allstate (Info) 315 250
American Modern (Info) N/A 250
Amica Mutual (Info) 259 250
Bankers Standard (Info) N/A 250
California Capital (Info) 160 250
Century National (Info) N/A 250
.....
它是如何运作的?
由于网页主要显示表格,这是我们需要查找的内容,因此第一步是获取表格列表。
该网站已将表格用于多个部分。很有可能页面的结构至少在请求之间保持不变。
我们需要的表几乎是页面上的最后一个(但不是最后一个)所以我决定遍历可用的表并从最后一个选择第二个。 t1
t2
t3
只是在迭代时保留最后的值。
从这里开始,HTML表通常具有相当标准的结构TR
和TD
。这个也使用TH
作为标题行。使用此table
BeautifulSoup然后允许我们枚举所有行。
然后我们可以找到所有列。如果您打印返回的内容,您将看到每行的所有条目,然后您可以查看切片所需的索引。
他们将输出显示在两个列组中,中间有一个空白列。我构建两个列表,提取两组列,然后将第二组附加到第一组的底部以供显示。