我正试图抓取看起来像this或this的俄勒冈州教师执照信息(这是公开的数据)。我的问题是,因为有数百名教师拥有不同数量的许可证和区域限制,我用来抓取数据的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中使用相同的想法。
我想要的输出示例。
如果我不清楚,请告诉我。
答案 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']