我对使用Scrapy或python相对较新。我想从几个不同的链接中提取,我在使用HTMLXPathSelector表达式(语法)时遇到问题。我已经查看了大量文档以了解正确的语法,但尚未找到解决方案。
以下是我尝试提取“img src”链接的示例。从
Page I am trying to extract the img src url from
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
class GeekSpider(BaseSpider):
name = "geekS"
allowed_domains = ["geek.com"]
start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
imgurl = hxs.select("//div[@class='article']//a/img/@src").extract()
return imgurl
我想我已经找到了x.select语句的语法,但是,因为我不熟悉这种语法/方法,所以我不确定。
这是我的items.py文件,基本上遵循scrapy教程:
from scrapy.item import Item, Field
class GeekItem(Item):
imgsrc = Field()
澄清:我要做的是提取页面上的img src网址。我不需要提取我已经想到的所有图像src(更容易)。
我只是想缩小范围,只提取img src的特定网址。 (我将在本网站的多个页面上使用它)
非常感谢任何帮助!
编辑 - 更新代码我在geek = geek()时遇到了一些语法错误所以我稍微改了一下,希望更容易理解和运行
答案 0 :(得分:3)
我相信你的xpath表达式应该更像这样。我在另一个页面(the Amazon shipping center article)上测试了它,它返回了所有十个可点击的图像。
geek['imgsrc'] = x.select("//div[@class='article']//a/img/@src").extract()
要解决您的其他问题,您需要将GeekItem导入GeekSpider代码。
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from geekspider.items import GeekItem # I'm guessing the name of your project here
class GeekSpider(BaseSpider):
name = "geekS"
allowed_domains = ["geek.com"]
start_urls = ["http://www.geek.com/articles/gadgets/kindle-fire-hd-8-9-on-sale-for-50-off-today-only-20121210/"]
def parse(self, response):
item = GeekItem()
hxs = HtmlXPathSelector(response)
item['imgsrc'] = hxs.select("//div[@class='article']//a/img/@src").extract()
return item