我使用脚本在本地运行Selenium,以便可以利用我的Spider中的响应(来自Selenium)。

这是selenium在本地运行的Web服务:

from flask import Flask, request, make_response
from flask_restful import Resource, Api
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

app = Flask(__name__)
api = Api(app)

class Selenium(Resource):
    _driver = None

    @staticmethod
    def getDriver():
        if not Selenium._driver:
            chrome_options = Options()
            chrome_options.add_argument("--headless")

            Selenium._driver = webdriver.Chrome(options=chrome_options)
        return Selenium._driver

    @property
    def driver(self):
        return Selenium.getDriver()

    def get(self):
        url = str(request.args['url'])

        self.driver.get(url)

        return make_response(self.driver.page_source)

api.add_resource(Selenium, '/')

if __name__ == '__main__':
    app.run(debug=True)

这是我的scrap脚蜘蛛,它利用该响应从网页中解析标题。
import scrapy
from urllib.parse import quote
from scrapy.crawler import CrawlerProcess

class StackSpider(scrapy.Spider):
    name = 'stackoverflow'
    url = 'https://stackoverflow.com/questions/tagged/web-scraping?sort=newest&pageSize=50'
    base = 'https://stackoverflow.com'

    def start_requests(self):
        link = 'http://127.0.0.1:5000/?url={}'.format(quote(self.url))
        yield scrapy.Request(link,callback=self.parse)

    def parse(self, response):
        for item in response.css(".summary .question-hyperlink::attr(href)").getall():
            nlink = self.base + item
            link = 'http://127.0.0.1:5000/?url={}'.format(quote(nlink))
            yield scrapy.Request(link,callback=self.parse_info,dont_filter=True)

    def parse_info(self, response):
        item = response.css('h1[itemprop="name"] > a::text').get()
        yield {"title":item}

if __name__ == '__main__':
    c = CrawlerProcess()
    c.crawl(StackSpider)
    c.start()



我应该带来什么麻烦才能使脚本以正确的方式工作?

最佳答案

我同时运行了两个脚本,它们均按预期运行。所以我的发现:

  • downloader/exception_type_count/twisted.internet.error.ConnectionRefusedError未经服务器许可(在此即ebay)无法解决此错误。
  • scrapy的日志:

    2019-05-25 07:28:41 [scrapy.statscollectors]信息:倾销Scrapy统计信息:
    {'downloader/exception_count':72,
    'downloader/exception_type_count/twisted.internet.error.ConnectionRefusedError':64,
    'downloader/exception_type_count/twisted.web._newclient.ResponseNeverReceived':8,
    'downloader/request_bytes':55523,
    “downloader/request_count”:81,
    'downloader/request_method_count/GET':81,
    'downloader/response_bytes':2448476,
    'downloader/response_count':9,
    'downloader/response_status_count/200':9,
    'finish_reason':'关机',
    'finish_time':datetime.datetime(2019,5,25,1,58,41,234183),
    'item_scraped_count':8,
    'log_count/DEBUG':90,
    'log_count/INFO':9
    'request_depth_max':1,
    'response_received_count':9
    “重试/计数”:72,
    'retry/reason_count/twisted.internet.error.ConnectionRefusedError':64,
    'retry/reason_count/twisted.web._newclient.ResponseNeverReceived':8,
    “调度程序/出队”:81,
    “调度程序/出队/内存”:81,
    ``调度程序/排队'':131,
    ``调度程序/排队/内存'':131,
    'start_time':datetime.datetime(2019,5,25,1,56,57,751009)}
    2019-05-25 07:28:41 [scrapy.core.engine]信息:蜘蛛关闭(关闭)

  • 您只能看到已抓取的8项。这些只是徽标和其他不受限制的内容。
  • Server Log:

    s://。 ,或者需要使用nonce('nonce -...')才能启用内联执行。
    ”,来源:https://vi.vipr.ebaydesc.com/ws/eBayISAPI.dll?ViewItemDescV4&item=323815597324&t=0&tid=10&category=169291&seller=wardrobe-ltd&excSoj=1&excTrk=1&lsite=0&ittenable=false&domain=ebay.com&descgauge=1&cspheader=1&oneClk=1&secureDesc=1(1)

  • Ebay不允许您抓取。

    那么如何完成您的任务>>
  • 每次抓取之前,都要检查同一站点的/robots.txt
    对于ebay来说:http://www.ebay.com/robots.txt
    您会看到几乎所有内容都是不允许的。

    用户代理: *
    禁止:/* rt = nc
    禁止:/b/LH_
    禁止:/brw/
    禁止:/clp/
    禁止:/clt/store/
    禁止:/csc/
    禁止:/ctg/
    禁止:/ctm/
    禁止:/dsc/
    禁止:/edc/
    禁止:/feed/
    禁止:/gsr/
    禁止:/gwc/
    禁止:/hcp/
    禁止:/itc/
    禁止:/lit/
    禁止:/lst/ng/
    禁止:/lvx/
    禁止:/mbf/
    禁止:/mla/
    禁止:/mlt/
    禁止:/myb/
    禁止:/mys/
    禁止:/prp/
    禁止:/rcm/
    不允许:/sch/%7C
    禁止:/sch/* LH_
    禁止:/sch/aop/
    禁止:/sch/ctg/
    不允许:/sl/node
    禁止:/sme/
    禁止:/soc/
    禁止:/talk/
    不允许:/票证/
    不允许:/今天/
    禁止:/trylater/
    不允许:/urw/write-review/
    禁止:/vsp/
    禁止:/ws/
    禁止:/sch/* modules = SEARCH_REFINEMENTS_MODEL_V2
    禁止:/b/modules = SEARCH_REFINEMENTS_MODEL_V2
    禁止:/itm/_nkw
    禁止:/itm/?适合
    禁止:/itm/&fits
    禁止:/cta/
  • 因此,请转到https://developer.ebay.com/api-docs/developer/static/developer-landing.html并检查其文档,他们的站点中有一些更简单的示例代码,可在不刮取的情况下获得所需的物品。
  • 09-27 22:01