我花了很多时间试图在没有成功的情况下废除信息。 我的目标是浏览类别和每个项目的废品标题,价格和标题的href链接。
问题似乎来自parse_items函数。我用firepath检查了xpath,我可以根据需要选择项目,所以也许我只是不知道scrapy如何处理xpath ......
这是我的代码
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from ..items import electronic_Item
class robot_makerSpider(CrawlSpider):
name = "robot_makerSpider"
allowed_domains = ["robot-maker.com"]
start_urls = [
"http://www.robot-maker.com/shop/",
]
rules = (
Rule(LinkExtractor(
allow=(
"http://www.robot-maker.com/shop/12-kits-robots",
"http://www.robot-maker.com/shop/36-kits-debutants-arduino",
"http://www.robot-maker.com/shop/13-cartes-programmables",
"http://www.robot-maker.com/shop/14-shields",
"http://www.robot-maker.com/shop/15-capteurs",
"http://www.robot-maker.com/shop/16-moteurs-et-actionneurs",
"http://www.robot-maker.com/shop/17-drivers-d-actionneurs",
"http://www.robot-maker.com/shop/18-composants",
"http://www.robot-maker.com/shop/20-alimentation",
"http://www.robot-maker.com/shop/21-impression-3d",
"http://www.robot-maker.com/shop/27-outillage",
),
),
callback='parse_items',
),
)
def parse_items(self, response):
hxs = Selector(response)
products = hxs.xpath("//div[@id='center_column']/ul/li")
items = []
for product in products:
item = electronic_Item()
item['title'] = product.xpath(
"li[1]/div/div/div[2]/h2/a/text()").extract()
item['price'] = product.xpath(
"div/div/div[3]/div/div[1]/span[1]/text()").extract()
item['url'] = product.xpath(
"li[1]/div/div/div[2]/h2/a/@href").extract()
#check that all field exist
if item['title'] and item['price'] and item['url']:
items.append(item)
return items
感谢您的帮助
答案 0 :(得分:0)
蜘蛛中的xpath确实有问题。
您的产品的第一个xpath确实有效,但它不够明确,可能很容易失败。虽然产品细节xpath根本不起作用。
我已经使用了它:
products = response.xpath("//div[@class='product-container']")
items = []
for product in products:
item = dict()
item['title'] = product.xpath('.//h2/a/text()').extract_first('').strip()
item['url'] = product.xpath('.//h2/a/@href').extract_first()
item['price'] = product.xpath(".//span[contains(@class,'product-price')]/text()").extract_first('').strip()
所有现代网站都有非常易于解析的html源代码(因为他们需要自己解析它们的css样式和javascript函数)。
因此,通常您应该查看要使用浏览器检查工具(右键单击 - >检查元素)提取的节点的类和ID名称,而不是使用某些自动选择工具。它更可靠,一旦掌握了它就不需要做太多工作。