当我编写parse()
函数时,我可以为一个页面同时生成请求和项目吗?
我想在页面A中提取一些数据,然后将数据存储在数据库中,并提取要遵循的链接(这可以通过CrawlSpider中的规则来完成).
我称A页面的链接页面是B页面,所以我可以编写另一个parse_item()来从B页面中提取数据,但是我想在B页面中提取一些链接,所以我只能使用规则来提取链接?如何解决Scrapy中的重复URL?
Cac*_*sky 20
是的,您可以同时处理请求和项目.从我所看到的:
def parse(self, response):
hxs = HtmlXPathSelector(response)
base_url = response.url
links = hxs.select(self.toc_xpath)
for index, link in enumerate(links):
href, text = link.select('@href').extract(), link.select('text()').extract()
yield Request(urljoin(base_url, href[0]), callback=self.parse2)
for item in self.parse2(response):
yield item
Run Code Online (Sandbox Code Playgroud)
Chr*_*kes 10
我不是100%我理解你的问题,但下面的代码使用basespider从一个起始URL请求站点,然后扫描起始URL为href,然后循环每个链接调用parse_url.parse_url中匹配的所有内容都会发送到您的项目管道.
def parse(self, response):
hxs = HtmlXPathSelector(response)
urls = hxs.select('//a[contains(@href, "content")]/@href').extract() ## only grab url with content in url name
for i in urls:
yield Request(urlparse.urljoin(response.url, i[1:]),callback=self.parse_url)
def parse_url(self, response):
hxs = HtmlXPathSelector(response)
item = ZipgrabberItem()
item['zip'] = hxs.select("//div[contains(@class,'odd')]/text()").extract() ## this bitch grabs it
return item
Run Code Online (Sandbox Code Playgroud)