python-2.7 – Scrapy和Wikipedia,获得空字符串

我是
Python的初学者,这是我的第一个问题.我试图从这个
Wikipedia page中删除标题和网址并将它们存储在.json中. scrapy shell中的初步xpath测试

sel.xpath('//tr[@style="vertical-align: top;"]//a')

在终端中显示标签内的网址和标题,但完整的脚本返回带有空字符串的.json文件,如下所示:

[{"url": [], "title": []},
{"url": [], "title": []},
{"url": [], "title": []},
{"url": [], "title": []}],  

这是整个脚本:

from scrapy.spider import Spider
from scrapy.selector import Selector

from wikipedia.items import WikipediaItem


class MySpider(Spider):
    name = "wiki"
    allowed_domains = ["en.wikipedia.org"]
    start_urls = [
        "http://en.wikipedia.org/wiki/Category:2013_films"
        ]

    def parse(self, response):
        sel = Selector(response)
        titles = sel.xpath('//tr[@style="vertical-align: top;"]//li')
        items = []
        for title in titles:
            item = WikipediaItem()
            item["url"] = sel.xpath("a/@href").extract()
            item["title"] = sel.xpath("a/text()").extract()
            items.append(item)  
        return(items)

如果你能给我一个提示我在哪里做错了,那就太好了.谢谢!

最佳答案 这是一个固定的parse()方法:

def parse(self, response):
    sel = Selector(response)
    titles = sel.xpath('//tr[@style="vertical-align: top;"]//li')
    for title in titles:
        item = WikipediaItem()
        link = title.xpath("a")
        if link:
            item["url"] = link.xpath("@href").extract()[0]
            item["title"] = link.xpath("text()").extract()[0]
        yield item

打印:

{'title': u'+1 (film)', 'url': u'/wiki/%2B1_(film)'}
{'title': u'10,000 Hours', 'url': u'/wiki/10,000_Hours'}
...

请注意,您唯一错误的是您应该在标题内使用xpath而不是使用sel进行搜索.

另请注意,您可以直接从循环中生成项目,而不是将提取的项目收集到列表中然后返回它们.

希望有所帮助.

点赞