因为我是python的新手,我需要你的帮助。我需要抓取网站中所有链接的数据。我使用meta进入链接并获取数据。当我使用我的代码时,我只能从一个链接获得。
import scrapy
from scrapy.spiders import CrawlSpider
from scrapy.selector import Selector
import urlparse
from alibaba.items import AlibabaItem
import mysql.connector
from mysql.connector import conversion
import re
class RedditCrawler(CrawlSpider):
name = 'baba'
allowed_domains = ['http://india.alibaba.com/']
start_urls = ['http://india.alibaba.com/supplier_list.htm?SearchText=automobile+parts&bizType=1']
custom_settings = {
'BOT_NAME': 'alibaba',
'DEPTH_LIMIT': 8,
'DOWNLOAD_DELAY': 0.5
}
def parse(self, response):
s = Selector(response)
next_link = s.xpath('//a[@class="next"]/@href').extract_first()
full_link = urlparse.urljoin('http://india.alibaba.com/',next_link)
yield self.make_requests_from_url(full_link)
item=AlibabaItem()
item['Name']=s.xpath('//div[@class="corp corp2"]//h2/a/text()').extract()
item['address']=s.xpath('//div[@class="value grcolor"]/text()').extract()
item['Annual_Revenue']=s.xpath('//div[@class="attrs"]//div[2]//div[@class="value"]//text()').extract()
item['Main_Markets']=s.xpath('//div[@class="attrs"]//div[3]//div[@class="value"]//text()').extract()
item['main_products']=s.xpath('//div[@class="value ph"]//text()').extract()
full_link1=s.xpath('//h2[@class="title ellipsis yrtil"]/a//@href').extract_first()
absolute_link = urlparse.urljoin('http://india.alibaba.com/',full_link1)
request_variable = scrapy.Request(absolute_link,callback=self.parse_website,dont_filter=True)
request_variable.meta['parcel_stuff'] = item
yield request_variable
def parse_website(self,response):
s = Selector(response)
item = response.meta['parcel_stuff']
item['Year_Established']=s.xpath('//table//tr[4]//td//a[@class="message-send mc-click-target"]//text()').extract()
yield item
答案 0 :(得分:0)
您已经在CrawlSpider上创建了RedditCrawler,它已经拥有了自己的parse()。将您的类更改为RedditCrawler(scrapy.Spider)。文档是here,但重要的部分是
警告
编写爬网蜘蛛规则时,请避免使用parse作为回调 CrawlSpider使用parse方法本身来实现其逻辑。 因此,如果您覆盖解析方法,则爬行蜘蛛将不再存在 工作