【发布时间】:2016-09-28 10:27:11
【问题描述】:
我正在使用名为 Scrapy 的 Python 库从 Wikipedia(特别是 this 之一)抓取网页。这是原始代码:
import scrapy
from wikipedia.items import WikipediaItem
class MySpider(scrapy.Spider):
name = "wiki"
allowed_domains = ["en.wikipedia.org/"]
start_urls = [
'https://en.wikipedia.org/wiki/Category:2013_films',
]
def parse(self, response):
titles = response.xpath('//div[@id="mw-pages"]//li')
items = []
for title in titles:
item = WikipediaItem()
item["title"] = title.xpath("a/text()").extract()
item["url"] = title.xpath("a/@href").extract()
items.append(item)
return items
然后在终端中,我运行 scrapy crawl wiki -o wiki.json -t json 将数据输出到 JSON 文件。虽然代码有效,但分配给“url”键的链接都是相对链接。 (即:{"url": ["/wiki/9_Full_Moons"], "title": ["9 Full Moons"]})。
我需要的是 http://en.wikipedia.org/wiki/9_Full_Moons,而不是 /wiki/9_Full_Moons。所以我修改了上面提到的代码,从 urlparse 库中导入 urljoin。我还修改了我的 for 循环,使其看起来像这样:
for title in titles:
item = WikipediaItem()
url = title.xpath("a/@href").extract()
item["title"] = title.xpath("a/text()").extract()
item["url"] = urljoin("http://en.wikipedia.org", url[0])
items.append(item)
return(items)
我相信这是正确的方法,因为分配给 url 键的数据类型用括号括起来(这需要一个列表,对吗?)所以为了得到其中的字符串,我输入了 url [0]。但是,这次我得到了一个如下所示的 IndexError:
IndexError: 列表索引超出范围
谁能帮忙解释我哪里出错了?
【问题讨论】: