出于培训目的,我正试图提取这条线:
<td>2017/01/15</td>
来自以下网页(检查元素预览):
<div class="bodyy">
<div id="FullPart">
<p class="d_intro">
<table id="ldeface" cellpadding="0" cellspacing="0">
<tbody><tr>
<td class="dtime">Date</td>
<td class="datt">Notifier</td>
<td class="dHMR">H</td>
<td class="dHMR">M</td>
<td class="dHMR">R</td>
<td class="dhMR">L</td>
<td class="dR"><img src="/images/star.gif" border="0"></td>
<td class="dDom">Domain</td>
<td class="dos">OS</td>
<td class="dview">View</td>
</tr>
<tr>
<td>2017/02/10</td>
<td><a href="/testarchive/</a></td>
<td></td>
<td></td>
<td></td>
我很困惑如何获取td部分以及哪些部分是正确的(class / id)以便使用BeatifulSoup获取正确的信息。 提前致谢
答案 0 :(得分:2)
对于你的例子,你应该使用下一件事。
from bs4 import BeautifulSoup
soup = BeautifulSoup('yor_html_source', 'html.parser')
for table in soup.find_all('table'):
tr = table.findAll('tr')[1]
td = tr.findAll('td')[0].text
print(td) # return 2017/02/10
如果您想从<td>2017/02/10</td>
变量中获取text
td
属性。
BeautifulSoup4也很酷Soup documentation
答案 1 :(得分:0)
from bs4 import BeautifulSoup
soup = BeautifulSoup(html)
tags=[str(tag) for tag in soup.find_all()]
for elem in tags:
if '<td>' in elem and len(elem.split('/')==4):
print(elem.text)
浏览所有标签,如果标签是td且有适量的斜线,则打印出来。
答案 2 :(得分:0)
收集数据:
要获取要处理的数据,您可以使用urllib2
import urllib2
resource = urllib2.urlopen("http://www.somewebsite.com/somepage")
html = resource.read()
# assuming html is the example with a few more rows in the table
处理数据:
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "lxml")
for table in soup.findAll("table"):
if table.attrs['id'] == 'ldeface':
rows = table.findAll("tr")
header = rows[0]
date_col = [ i for i, col in enumerate(header.findAll("td")) if col.text == "Date"][0]
for row in rows[1:]:
print row.findAll("td")[date_col].text
<强>结果:强>
2017/02/10
2017/02/11
2017/03/10
...
您可以根据单元格中的文本,像我为表格所做的id属性或类似于表格的类属性来提取其他列