创建一个局部变量来表示xpath tr []中的一系列数字?

时间:2016-05-13 20:53:23

标签: python-2.7 xpath web-scraping

我正试图抓取看起来像thisthis的俄勒冈州教师执照信息(这是公开的数据)。我的问题是,因为有数百名教师拥有不同数量的许可证和区域限制,我用来抓取数据的html标签号码随着我没有明确编码的每个新组合而改变。

这是我的第一个链接数据的代码的一部分。

for t in range(0,1000): #Drawing from a txt file with web address ids

    address = 'http://www.tspc.oregon.gov/lookup_application/LDisplay_Individual.asp?id=' + lines[t]

    page = requests.get(address)

    tree = html.fromstring(page.text)

    if "District Restriction" in dist_rest_find5: 
            print "dist rest 5"

            #Put Teacher License info into lists
        if "License Type" in tree.xpath('//tr[18]//text()'):
            test1 = tree.xpath('//tr[19]//text()')
            test1 = ([s.strip('\r') for s in test1])
            test1 = ([s.strip(' ') for s in test1])
            test1 = filter(None, test1)
            ltest1.append(test1)
        else:
            ltest1.append('')

        if "License Type" in tree.xpath('//tr[26]//text()'):
            test2 = tree.xpath('//tr[27]//text()')
            test2 = ([s.strip('\r') for s in test2])
            test2 = ([s.strip(' ') for s in test2])
            test2 = filter(None, test2)
            ltest2.append(test2)
        else:
            ltest2.append('')

我已经意识到对每个新组合进行编码需要几周的时间,我已经想到了一个解决方案,但我不知道如何将其转换为Python。

我希望if "License Type" in tree.xpath('//tr[18]//text()')中的数字是一个循环遍历所有tr[]标记的范围,直到满足条件,将许可类型附加到列表中,然后移到下一个if "License Type" in tree.xpath('//tr[26]//text()')声明。我不希望有重复,所以从第二个语句中取出的内容不能与第一个重叠。在Stata中,我会创建一个local代替数字,但我不知道是否会在Python中使用相同的想法。

我想要的输出示例。

enter image description here

如果我不清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

据我了解,您基本上想从每个教师的页面中获取所有许可证。这里的想法是找到第一个单元格中包含License Type文本的行,然后获取该行的第一个following tr sibling

实现:

import requests
from lxml import html


url = "http://www.tspc.oregon.gov/lookup_application/LDisplay_Individual.asp?id=535454R3L38"
page = requests.get(url)

tree = html.fromstring(page.text)
for license_row in tree.xpath(".//tr[td[1] = 'License Type']/following-sibling::tr[1]"):
    license_data = license_row.xpath(".//td/text()")
    print(license_data)

打印:

['Initial II Teaching', '5/31/2015', '6/9/2018', 'Active']
['Initial II School Counselor', '6/10/2014', '6/9/2017', 'Active']
['Initial Administrator', '6/10/2014', '7/10/2016', 'Active']
['Initial I School Counselor', '6/10/2008', '6/9/2011', 'Expired']
['Conditional Permit', '10/3/2006', '10/2/2008', 'Expired']
['Initial School Counselor', '4/26/2005', '6/9/2008', 'Expired']
['Initial I Teaching', '6/13/2002', '6/9/2006', 'Expired']
['Conditional Permit', '12/21/2002', '12/20/2005', 'Expired']
['Conditional Permit', '3/1/2004', '12/20/2005', 'Expired']
['Conditional Permit', '9/1/2004', '4/25/2005', 'Expired']
['Transitional Teaching', '7/24/2001', '7/24/2004', 'Expired']
['Expedited Service', '7/24/2001', '7/24/2004', 'Expired']
['Restricted Transitional Teaching', '7/24/2001', '7/24/2004', 'Expired']