编程面试题

  • Scrapy中提供sqlite管道的示例代码吗?

    我做了这样的事情: # # Author: Jay Vaughan # # Pipelines for processing items returned from a scrape. # Dont forget to add pipeline to the ITEM_PIPELINES setting # See: http:doc.scrapy.orgtopicsitem-pipeline.html

  • 如何强制scrapy爬行重复的URL?

    你可能正在寻找关于的dont_filter=True论点Request。

  • 在Cron工作中Scrapy

    我解决了这个问题,包括进入bash文件的PATH #!binbash cd myfoldercrawlers PATH=$PATH:usrlocalbin export PATH scrapy crawl my_spider_name

  • 如何在python的scrapy选择器中仅提取文本

    h1[@class='state'] 在上面的xpath中,你正在选择h1具有class属性的标签state 所以这就是为什么它选择所有进入的东西 h1 element 如果你只想选择h1标签文本,则只需 pre

  • 避免重复爬网

    我相信你正在寻找的是“持久性支持”,以暂停和恢复爬网。 要启用它,你可以执行以下操作: scrapy crawl somespider -s JOBDIR=crawlssomespider-1

  • 创建管道来保存scrapy文件吗?

    如果你获取一个pdf文件,它将被存储在内存中,但是如果pdf文件的大小不足以填满你的可用内存,则可以。 你可以将PDF保存在Spider回调中: def parse_listingself, response: # ... extract pdf urls for url in pdf_urls: yield Requesturl, callback=sel

  • Scrapy抛出ImportError:无法导入名称xmlrpc_client

    我刚刚在OS X上解决了这个问题。 请先备份你的文件。 sudo rm -rf LibraryPython2.7site-packagessix* sudo rm -rf SystemLibraryFrameworksPython.frameworkVersions2.7Extraslibpythonsix* sudo pip install six

  • 在Javascript中抓取数据

    已经准备好以json格式存储所需的所有数据。 Scrapy shell在编写蜘蛛程序之前提供了一个非常方便思想者访问网站的命令: $ scrapy shell https:www.mcdonalds.com.sglocate-us 2013-09-27 00:44:14-0400 [scrapy] INFO: Scrapy 0.16.5 started bot

  • TypeError:“字节”类型的对象不可JSON序列化

    bytes自己创建这些对象: item['title'] = [t.encode'utf-8' for t in title] item['link'] = [l.encode'utf-8' for l in link] item['desc'] = [d.encode'utf-8' for d in desc] items.appenditem 其中的每个

  • 为Scrapy构建RESTful Flask API

    我认为没有一种好的方法可以为Scrapy创建基于Flask的API。Flask不是正确的工具,因为它不是基于事件循环的。更糟糕的是,Twisted反应堆(Scrapy使用)不能在单个线程中多次启动停止。 假设Twisted电抗器没有问题,你可以启动和停止它。它不会使事情变得更好,因为你的scrape_it函数可能会长时间阻塞,因此你将需要许多线程进程。 我认为方法是使用Twiste

  • Scrapy:ImportError:没有模块命名项目

    你的Spider模块的名称与scrapy项目模块的名称相同,因此python尝试导入与byub.py spider相关的项目。 快速修复: 将你的Spider模块重命名为byub_org.py或类似名称。 或from __future__ import absolute_import在byub.py Spider中使用。 li

  • scrapy run spider from script

    只需检查官方文档即可。我会进行一些更改,以便你可以控制Spider仅在执行此操作时运行,python myscript.py而不是每次从其导入时都运行。只需添加一个if __name__ == "__main__": import scrapy from scrapy.crawler import CrawlerProcess class MySpiders

  • Scrapy和响应状态代码:如何进行检查?

    http:doc.codingdict.comscrapyindex.html 假设启用了默认的spider中间件,则HttpErrorMiddleware会过滤掉200-300范围之外的响应代码。你可以通过在Spider上设置handle_httpstatus_list属性来告诉中间件你要处理404。 class TothegoSitemapHomesSpiderSitemapSpi

  • Geopy:捕获超时错误

    尝试这个: from geopy.geocoders import Nominatim from geopy.exc import GeocoderTimedOut my_address = '1600 Pennsylvania Avenue NW Washington, DC 20500' geolocator = Nominatim try: location = geolocator.geo

  • 使用一个Scrapy spider访问多个网站

    警告:此答案适用于Scrapy v0.7,自那时以来,spider管理器api发生了很大变化。 覆盖默认的SpiderManager类,从数据库或其他地方加载自定义规则,并使用自己的规则正则表达式和domain_name实例化自定义spider 在mybot settings.py中: SPIDER_MANAGER_CLASS = 'mybot.spidermanager

  • 如何抓取导出项目以将每个项目的CSV文件分开

    我在这里发布了我用来MultiCSVItemPipeline基于上述drcolossos的答案生成代码的代码。 该管道假定所有Item类均遵循* Item约定(例如TeamItem,EventItem),并创建team.csv,event.csv文件并将所有记录发送到适当的csv文件。 from scrapy.exporters import CsvItemExport

  • scrapy-如何停止重定向(302)

    你可以简单地通过添加诸如 meta={'dont_redirect': True} 你也可以停止针对特定响应代码的重定向,例如 meta={'dont_redirect': True,"handle_httpstatus_list": [302]} 它将停止仅重定向302响应代码。 例

  • Scrapy Shell和Scrapy Splash

    只需将要封装的URL包装在启动http api中。 因此,需要以下内容: scrapy shell 'http:localhost:8050render.html?url=http:domain.compage-with-javascript.htmltimeout=10wait=0.5' 这里localhost:

  • scrapy text encoding

    Scrapy以unicode而不是ascii返回字符串。要将所有字符串编码为utf-8,可以编写: vriskoit['eponimia'] = [s.encode'utf-8' for s in hxs.select'a[@itemprop="name"]text'.extract] 但我认为你会期待另一个结果。你的代码返回包含所有搜索结果的一项。要为

  • Scrapy Python设置用户代理

    将您的USER_AGENT行移至settings.py文件,而不是scrapy.cfg文件中。settings.py应该与items.py使用scrapy startproject命令处于同一级别,在这种情况下,它应该类似于myprojectsettings.py

  • 如何为不同的spider设置不同的抓取设置?

    但是从1.0.0版本开始,scrapy中有一个新功能,您可以像这样覆盖每个spider的设置: class MySpiderscrapy.Spider: name = "my_spider" custom_settings = {"HTTP_PROXY":'http:127.0.0.1:8123', "DOWNLOADER_MIDDLEWARE

  • 在Scrapy中本地运行所有spider

    为什么不只使用以下内容: scrapy list|xargs -n 1 scrapy crawl

  • Scraping: SSL: CERTIFICATE_VERIFY_FAILED error for http://en.wikipedia.org

    从前,我偶然发现了这个问题。如果您使用的是macOS,请转至Macintosh HD应用程序 Python3.6文件夹(或您使用的任何Python版本)双击“ Install Certificates.command”文件。

  • crapy管道以正确的格式导出csv文件

    我从头开始,下面的spider应该与 scrapy crawl amazon -t csv -o Amazon.csv --loglevel=INFO 因此,使用电子表格打开CSV文件对我来说是 希望这可以帮助 : import scrapy class AmazonItemscrapy.Item: rating = s

  • Scrapy with Privoxy and Tor:如何更新IP

    编辑:基于具体要求(对于每个请求或之后新的IP Ñ请求),把适当的呼叫到set_new_ip在process_request中间件的方法。但是请注意,对set_new_ip函数的调用不必始终确保新的IP(存在指向FAQ的链接以及相关说明)。 EDIT2:具有ProxyMiddleware类的模块如下所示: pre

  • Scrapy:使用重命名默认图像名称自定义图像管道

    在 pipelines.py from scrapy.contrib.pipeline.images import ImagesPipeline from scrapy.http import Request from PIL import Image from cStringIO import StringIO import re class jellyImagesPipelineImagesPipelin

  • 创建一个通用的爬行spider

    我使用Scrapy Extensions方法将Spider类扩展到一个名为Masterspider 的类,该类包括一个通用解析器。 下面是我的通用扩展解析器的非常“简短”的版本。请注意,一旦开始使用AJAX处理页面,就需要使用Javascript引擎(例如Selenium或BeautifulSoup)实现渲染器。还有许多其他代码来管理站点之间的差异(基于列标题的报废,处理相对URL和长URL,管理不同类型的数据容器等)。

  • 使用BeautifulSoup获取文档DOCTYPE

    Beautiful Soup 4有一个用于DOCTYPE声明的类,因此您可以使用它来提取顶级的所有声明(尽管您毫无疑问会期望一个或一个都不要!) def doctypesoup: items = [item for item in soup.contents if isinstanceitem, bs4.Doctype] return items[0] if items else None

  • 在Scrapy中将项目写入MySQL数据库

    在管道中尝试以下代码 import sys import MySQLdb import hashlib from scrapy.exceptions import DropItem from scrapy.http import Request class MySQLStorePipelineobject: def __init__self: self.conn = MySQLd

  • 如何结合使用scrapy和htmlunit来使用javascript抓取网址

    下面是一个在下载处理程序中间件中使用selenium和phantomjs headless webdriver的工作示例。 class JsDownloadobject: @check_spider_middleware def process_requestself, request, spider: driver = webdriver.PhantomJSexecutable_path='

  • 如何使用PyCharm调试Scrapy项目

    该scrapy命令是python脚本,这意味着你可以从PyCharm内部启动它。 当检查scrapy二进制文件(which scrapy)时,你会注意到这实际上是一个python脚本: #!usrbinpython from scrapy.cmdline import execute execute

  • Python Scrapy:将相对路径转换为绝对路径

    我所做的是: import urlparse ... def parseself, response: ... urlparse.urljoinresponse.url, extractedLink.strip ... 注意strip,因为我有时会遇到奇怪的链接,例如: a href=" MID_BRAND_NEW!%c2%a0MI

  • 使用Scrapy从网站查找和下载pdf文件

    我已经更新了你的代码,这实际上是可行的: import urlparse import scrapy from scrapy.http import Request class pwc_taxscrapy.Spider: name = "pwc_tax" allowed_domains = ["www.pwc.com"] start_urls = ["http:www.pwc

  • 在Scrapy中发送发帖请求

    确保你的每个元素formdata的类型均为字符串 Unicode frmdata = {"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'} url = "https:play.google.comstoregetreviews" yield Form

  • 从脚本抓取总是在抓取后阻止脚本执行

    spider完成后,你将需要停止反应器。你可以通过侦听spider_closed信号来完成此操作: from twisted.internet import reactor from scrapy import log, signals from scrapy.crawler import Crawler from scrapy.settings import Settings fro

  • 如何处理302重定向中的scrapy

    在这种情况下,忘记了中间件,就可以解决问题: meta = {'dont_redirect': True,'handle_httpstatus_list': [302]} 也就是说,在产生请求时,你将需要包含meta参数: yield Requestitem['link'],meta = { 'dont_

  • 如何使用Scrapy从网站上获取所有纯文本?

    最简单的选择是to 并且找到所有内容:extract bodytextjoin ''.joinsel.select"bodytext".extract.strip 这里sel是一个Selector实例。 另一种选择是使用nltk

  • 如何提供URL进行抓取?

    不太确定命令行选项。但是,你可以这样编写spider。 class MySpiderBaseSpider: name = 'my_spider' def __init__self, *args, **kwargs: superMySpider, self.__init__*args, **kwargs self.start_urls = [

  • 如何获得刮擦失败的URL?

    是的,这是可能的。 下面的代码在failed_urls基本Spider类中添加了一个列表,并在URL的响应状态为404时将URL附加到该列表中(需要扩展此范围以涵盖其他错误状态)。 接下来,我添加了一个将列表连接到单个字符串中的句柄,并在关闭蜘蛛时将其添加到spider的统计信息中。 根据你的评论,可以跟踪扭曲的错误,下面的一些答案提供了

  • 将Scrapy与经过身份验证(登录)的用户会话一起使用

    在上面的代码中,FormRequest用于进行身份验证的将该after_login函数设置为其回调。这意味着该after_login函数将被调用并传递登录尝试得到的页面作为响应。 然后,通过在页面中搜索特定的字符串(在本例中为)来检查你是否成功登录"authentication failed"。如果找到,则spider结束。