python-2.7 - Scrapy 和维基百科,得到空字符串

标签 python-2.7 xpath scrapy

我是 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'}
...

请注意,您做错的唯一一件事是您应该在 title 中使用 xpath 进行搜索。而不是使用 sel .

另请注意,不是将提取的项目收集到列表中然后返回它们,您可以 yield循环中的项目。

希望有帮助。

关于python-2.7 - Scrapy 和维基百科,得到空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22252405/

相关文章:

python - Scrapy 结合文本和粗体

python - Django/Python 错误。 "ImportError: Import by filename is not supported."

python - 如何在 Windows 7 上安装 Boost.Python 以安装 python 包?

xpath - 使用xpath帮助从HTML表中提取文本

java - 用于检查 xml 是否包含键和值的 XPath 表达式

python - 我怎样才能停止一个 scrapy CrawlSpider 并稍后从它停止的地方恢复?

Python - 多线程帮助 - 读取多个文件 - ETL 到 SQL Server

python - 变量上的 b'string' 等价于什么?

selenium - 文本包含而不是常规空格时的 XPath 匹配问题

python - 能够在从脚本运行 scrapy 时更改设置