我试图为电子商务网站建立一个简单的抓取。在
它遵循链接,似乎通过XPath找到所有需要的元素。但是,由于某些原因,它只解析1200个条目而不是1531个条目,好像有某种限制。 我尝试过切换选择器,甚至在selenium中模拟下一页的点击,但没有成功。在
以下是完整的爬虫代码:
import scrapy
from scrapy.loader import ItemLoader
from scrapy.crawler import CrawlerProcess
class Product(scrapy.Item):
category=scrapy.Field()
price = scrapy.Field()
name = scrapy.Field()
class ObiSpider(scrapy.spiders.CrawlSpider):
name = "obi_spider"
start_urls = ["https://www.obi.ru/vsyo-dlya-doma/lakokrasochnye-materialy/c/296"]
def parse(self, response):
for link in response.xpath("//ul[@class='first-level dashed']/li/a/@href").extract():
yield scrapy.Request(response.urljoin(link), callback=self.parse_page)
def parse_page(self, response):
ans=response.xpath("//li[@class='product large']")
for prod in ans:
loader = ItemLoader(item=Product(), selector=prod)
loader.add_xpath('category', "//div[@class='head dashed selectable']/a/text()")
loader.add_xpath('name', ".//span[@class='description']/p/text()")
loader.add_xpath('price', ".//span[@class='price']/span/@data-csscontent")
yield loader.load_item()
path = response.xpath("//div[@id='PaginationLinks']/a/@href").extract()
for link in path:
if "?page" in link:
yield scrapy.Request(response.urljoin(link), callback=self.parse_page)
process = CrawlerProcess()
process.crawl(ObiSpider)
process.start()
感谢任何帮助。提前谢谢。在
我想这不是你的蜘蛛的问题,而是产品数量的计算。 您可以在带有产品列表的页面中看到:
有些产品有一些组合,但列表中只有一个链接。 等:
相关问题 更多 >
编程相关推荐