我正在使用 lxml.html 模块
from lxml import html
page = html.parse('http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution')
# print(page.content)
unis = page.xpath('//tr/td[@valign="top" and @style="width: 50%;padding-right:15px"]/h3/text()')
print(unis.__len__())
with open('workfile.txt', 'w') as f:
for uni in unis:
f.write(uni + '\n')
这里的网站(http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution#Z)到处都是大学。
问题在于它解析直到字母“H' (244 unis)。 我无法理解为什么,因为我看到它将所有HTML解析到最后。
我还记录了我自己,244不是列表的限制或python3中的任何内容。
答案 0 :(得分:1)
HTML页面根本不是HTML,它完全被破坏了。但以下将做你想要的。它使用rename
解析器。
int execv(const char *path, char *const argv[]);
有关详细信息,请参阅BeautifulSoup。
答案 1 :(得分:1)
对于网页抓取,我建议您使用BeautifulSoup 4 使用bs4,这很容易做到:
from bs4 import BeautifulSoup
import urllib.request
universities = []
result = urllib.request.urlopen('http://directory.ccnecommunity.org/reports/rptAccreditedPrograms_New.asp?sort=institution#Z')
soup = BeautifulSoup(result.read(),'html.parser')
table = soup.find_all(lambda tag: tag.name=='table')
for t in table:
rows = t.find_all(lambda tag: tag.name=='tr')
for r in rows:
# there are also the A-Z headers -> check length
# there are also empty headers -> check isspace()
headers = r.find_all(lambda tag: tag.name=='h3' and tag.text.isspace()==False and len(tag.text.strip()) > 2)
for h in headers:
universities.append(h.text)