【发布时间】:2018-11-20 16:01:16
【问题描述】:
我对 Python 和一般编程非常陌生(我基本上是几天前开始的),所以如果我使用了错误的术语或者我问了一个愚蠢的问题,请原谅我。
我正在编写一个网络爬虫来从一个职位空缺网站获取一些数据。我编写了一些代码,首先从主搜索结果页面下载数据,对其进行解析并从中提取标题,其中包含指向每个空缺页面的链接,可以找到每个特定空缺的详细信息。然后我编写了打开每个链接并解析每个空缺页面的 html 的代码。
现在这一切正常。我遇到的问题是以下问题。我想从每个空缺页面中抓取一些数据,并将每个空缺的数据保存在一个单独的列表中,以便稍后我可以将所有这些列表放入一个数据框中。因此,我一直在寻找一种方法来对每个列表进行编号或“索引”(如果这是正确的术语),以便我以后可以参考它们。以下是我目前拥有的代码。按照我通过阅读 Stackoverflow 上的现有答案找到的建议,我尝试使用 enumerate 创建一个可以分配给每个列表的索引,如下所示:
vacancy_headings = resultspage1_soup.body.findAll("a", class_ ="vacancy-link")
vacancydetails = []
for index, vacancy in enumerate(vacancy_headings, start=0):
vacancypage_url = urljoin("https://www.findapprenticeship.service.gov.uk",vacancy["href"])
vacancypage_client = urlopen(vacancypage_url)
vacancypage_html = vacancypage_client.read()
vacancypage_soup = soup(vacancypage_html, "html.parser")
vacancydetails[index]=[]
for p in vacancypage_soup.select("p"):
if p.has_attr("itemprop"):
if p["itemprop"] == "employmentType" or p["itemprop"] == "streetAddress" or p["itemprop"] == "addressLocality" or p["itemprop"] == "addressRegion" or p["itemprop"] == "postalCode":
cells = p.text
vacancydetails[index].append(cells)`
但我收到以下错误消息:
IndexError Traceback (most recent call last)
<ipython-input-10-b8a75df16395> in <module>()
9 vacancypage_html = vacancypage_client.read()
10 vacancypage_soup = soup(vacancypage_html, "html.parser")
---> 11 vacancydetails[index]=[]
12
13 for p in vacancypage_soup.select("p"):
IndexError: list assignment index out of range
谁能给我解释一下(如果可能的话,用通俗易懂的语言!)出了什么问题,我该如何解决这个问题?
谢谢!!
【问题讨论】:
-
vacancydetails.append([])? -
enumerate(),默认从0开始;所以你不需要明确地做start=0。
标签: python list for-loop indexing web-scraping