使用Python从网页中提取数据

时间:2017-05-20 15:19:02

标签: python

出于培训目的,我正试图提取这条线:

<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获取正确的信息。 提前致谢

3 个答案:

答案 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属性或类似于表格的类属性来提取其他列