我是 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/