我是
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进行搜索.
另请注意,您可以直接从循环中生成项目,而不是将提取的项目收集到列表中然后返回它们.
希望有所帮助.