使用Python进行简单的Web Scraping

时间:2014-12-03 02:20:11

标签: python html web-scraping lxml

我一直无法找到一种简单的方法,我一直关注this 我写了以下内容,

##just comments before this
    import lxml,requests
 23 page = requests.get('https://finalexams.rutgers.edu.html')
 24 
 25 tree = html.fromstring(page.text)
 26 
 27 tableRow = tree.xpath('//tr/text() ' )
 28 
 29 print 'Rows' , tableRow

该脚本需要解析像这样的表行并取出它们内部的东西,但可能存在无限量的表行。我不知道如何访问嵌套标签,它们没有唯一的名称或ID供我查找。

如何编写一个for循环来获取每个表行并让我抓住它们的各个部分?

  <tr>
    <td> 04264</td>
    <td>01:198:205</td>
    <td>01</td>
    <td>INTR DISCRET STRCT I</td>



  <td>C</td>
  <td>Dec 17, 2014:  8:00 AM - 11:00 AM </td>




  </tr>

  <tr>
    <td> 09907</td>
    <td>01:198:214</td>
    <td>01</td>
    <td>SYSTEMS PROGRAMMING</td>



  <td>C</td>
  <td>Dec 18, 2014:  8:00 PM - 11:00 PM </td>




  </tr>

2 个答案:

答案 0 :(得分:3)

如果您想要找到tr元素本身而不是其(空)文本,只需搜索tr元素,而不是文本:

rows = tree.xpath('//tr')

然后你可以迭代它们:

for row in rows:

然后你可以搜索每一个td元素(例如,使用row.xpathrow.findall等),或者假设他们所有的孩子都是{{1元素(因为它们碰巧在这种情况下):

td

然后你可以做任何你想对每一栏做的事情,比如提取它的文字:

    for column in row:

答案 1 :(得分:0)

迭代所有tr代码,并为每一行的td代码制作内循环,例如:

from lxml.html import fromstring

data = """
your html here
"""

root = fromstring(data)
for index, row in enumerate(root.xpath('//table/tr')):
    print "Row #%s" % index

    for cell in row.findall('td'):
        print cell.text.strip()

    print "----"

打印:

Row #0
04264
01:198:205
01
INTR DISCRET STRCT I
C
Dec 17, 2014:  8:00 AM - 11:00 AM
----
Row #1
09907
01:198:214
01
SYSTEMS PROGRAMMING
C
Dec 18, 2014:  8:00 PM - 11:00 PM
----