Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用meta从网站中的所有链接获取数据_Python_Scrapy - Fatal编程技术网

Python 如何使用meta从网站中的所有链接获取数据

Python 如何使用meta从网站中的所有链接获取数据,python,scrapy,Python,Scrapy,由于我是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 m

由于我是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

您已经将RedditCrawler基于CrawlSpider,它已经有了自己的parse()。将您的类更改为RedditCrawler(scrapy.Spider)。文件是,但重要的是

警告

在编写爬网爬行器规则时,避免使用解析作为回调,因为 爬行爬行器使用解析方法本身来实现其逻辑。 因此,如果重写解析方法,爬网爬行器将不再 工作