标签: scrapy

Scrapy Python设置用户代理

我试图通过向项目配置文件添加额外的行来覆盖我的crawlspider的用户代理.这是代码:

[settings]
default = myproject.settings
USER_AGENT = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"


[deploy]
#url = http://localhost:6800/
project = myproject
Run Code Online (Sandbox Code Playgroud)

但是当我对自己的网络运行爬虫时,我注意到蜘蛛没有拿起我的自定义用户代理,而是默认的"Scrapy/0.18.2(+ http://scrapy.org)".任何人都可以解释我做错了什么.

注意:

(1).它在我尝试全局覆盖用户代理时起作用:

scrapy crawl myproject.com -o output.csv -t csv -s USER_AGENT="Mozilla...."
Run Code Online (Sandbox Code Playgroud)

(2).当我从配置文件中删除"default = myproject.setting"行并运行scrapy crawl myproject.com时,它说"找不到蜘蛛......",所以我觉得在这种情况下不应该删除默认设置.

非常感谢您的帮助.

python user-agent screen-scraping web-crawler scrapy

27
推荐指数
1
解决办法
3万
查看次数

scrapy - 解析分页的项目

我有一个形式的网址:

example.com/foo/bar/page_1.html
Run Code Online (Sandbox Code Playgroud)

总共有53页,每页有~20行.

我基本上想要从所有页面获取所有行,即~53*20项.

我在我的parse方法中有工作代码,它解析单个页面,并且每个项目也更深入一页,以获得有关该项目的更多信息:

  def parse(self, response):
    hxs = HtmlXPathSelector(response)

    restaurants = hxs.select('//*[@id="contenido-resbus"]/table/tr[position()>1]')

    for rest in restaurants:
      item = DegustaItem()
      item['name'] = rest.select('td[2]/a/b/text()').extract()[0]
      # some items don't have category associated with them
      try:
        item['category'] = rest.select('td[3]/a/text()').extract()[0]
      except:
        item['category'] = ''
      item['urbanization'] = rest.select('td[4]/a/text()').extract()[0]

      # get profile url
      rel_url = rest.select('td[2]/a/@href').extract()[0]
      # join with base url since profile url is relative
      base_url = get_base_url(response)
      follow = urljoin_rfc(base_url,rel_url)

      request = Request(follow, callback = parse_profile)
      request.meta['item'] = item
      return request


  def parse_profile(self, …
Run Code Online (Sandbox Code Playgroud)

python scrapy

26
推荐指数
3
解决办法
2万
查看次数

如何禁用或更改ghostdriver.log的路径?

问题是直截了当的,但有些背景可能有所帮助.

我正在尝试使用selenium和phantomjs作为下载程序来部署scrapy.但问题是它在尝试部署时继续说权限被拒绝.所以我想改变ghostdriver.log的路径或者只是禁用它.看着phantomjs -h和ghostdriver github页面我找不到答案,我的朋友google也让我失望了.

$ scrapy deploy
Building egg of crawler-1370960743
'build/scripts-2.7' does not exist -- can't clean it
zip_safe flag not set; analyzing archive contents...
tests.fake_responses.__init__: module references __file__
Deploying crawler-1370960743 to http://localhost:6800/addversion.json
Server response (200):
Traceback (most recent call last):
  File "/usr/lib/pymodules/python2.7/scrapyd/webservice.py", line 18, in render
    return JsonResource.render(self, txrequest)
  File "/usr/lib/pymodules/python2.7/scrapy/utils/txweb.py", line 10, in render
    r = resource.Resource.render(self, txrequest)
  File "/usr/lib/python2.7/dist-packages/twisted/web/resource.py", line 216, in render
    return m(request)
  File "/usr/lib/pymodules/python2.7/scrapyd/webservice.py", line 66, in render_POST
    spiders = get_spider_list(project)
  File "/usr/lib/pymodules/python2.7/scrapyd/utils.py", …
Run Code Online (Sandbox Code Playgroud)

scrapy phantomjs ghostdriver

26
推荐指数
2
解决办法
1万
查看次数

如何为scrapy提供URL进行爬行?

我想使用scrapy来抓取网页.有没有办法从终端本身传递起始URL?

文档中给出了可以给出蜘蛛的名称或URL,但是当我给出url时它会抛出一个错误:

//我的蜘蛛的名字就是例子,但是我给的是url而不是我的蜘蛛名字(如果我给蜘蛛名字,它可以正常工作).

scrapy crawl example.com

错误:

文件"/usr/local/lib/python2.7/dist-packages/Scrapy-0.14.1-py2.7.egg/scrapy/spidermanager.py",第43行,在create raise KeyError("未找到蜘蛛:% s"%spider_name"KeyError:'找不到蜘蛛:example.com'

如何让scrapy在终端上给出的url上使用我的蜘蛛?

web-crawler scrapy

25
推荐指数
4
解决办法
2万
查看次数

如何以编程方式设置和启动Scrapy spider(网址和设置)

我已经使用scrapy编写了一个正在运行的爬虫,
现在我想通过Django webapp来控制它,也就是说:

  • 设置1或几个 start_urls
  • 设置1或几个 allowed_domains
  • 设定settings
  • 启动蜘蛛
  • 停止/暂停/恢复蜘蛛
  • 运行时检索一些统计数据
  • 在蜘蛛完成后检索一些统计数据.

起初我认为scrapyd为此而制作的,但在阅读了文档之后,似乎它更像是一个能够管理"打包蜘蛛"的守护进程,也就是"scrapy eggs"; 并且所有的设置(start_urls,allowed_domains,settings)仍必须在"scrapy鸡蛋"本身硬编码; 所以它看起来不像我的问题的解决方案,除非我错过了什么.

我还看了这个问题:如何为scrapy提供URL以进行爬行?; 但提供多个网址的最佳答案是由作者himeslf认定为"丑陋的黑客",涉及一些python子进程和复杂的shell处理,所以我认为这里找不到解决方案.此外,它可能适用start_urls,但它似乎不允许allowed_domainssettings.

然后我看了scrapy webservices:它似乎是检索统计数据的好方法.但是,它仍然需要一个正在运行的蜘蛛,并且没有改变的线索settings

关于这个问题有几个问题,似乎没有一个问题令人满意:

我知道scrapy用于生产环境; 像scrapyd这样的工具表明,确实有一些方法可以满足这些要求(我无法想象用于处理的scrapy egg scrap是手工生成的!)

非常感谢你的帮助.

python scrapy scrapyd

25
推荐指数
3
解决办法
6167
查看次数

如何使用scrapy中的CrawlSpider点击一个带有javascript onclick的链接?

我希望scrapy抓取页面,进入下一个链接看起来像这样:

<a href="#" onclick="return gotoPage('2');"> Next </a>
Run Code Online (Sandbox Code Playgroud)

scrapy能解释那个javascript代码吗?

通过livehttpheaders扩展,我发现单击Next会生成一个POST,其中包含一个非常大的"垃圾",如下所示:

encoded_session_hidden_map=H4sIAAAAAAAAALWZXWwj1RXHJ9n
Run Code Online (Sandbox Code Playgroud)

我正在尝试在CrawlSpider类上构建我的蜘蛛,但我无法弄清楚如何对它进行编码,BaseSpider我使用该parse()方法处理第一个URL,这恰好是一个登录表单,我在其中执行了一个POST:

def logon(self, response):
    login_form_data={ 'email': 'user@example.com', 'password': 'mypass22', 'action': 'sign-in' }
    return [FormRequest.from_response(response, formnumber=0, formdata=login_form_data, callback=self.submit_next)]
Run Code Online (Sandbox Code Playgroud)

然后我定义了submit_next()来告诉下一步该做什么.我无法弄清楚如何告诉CrawlSpider在第一个URL上使用哪种方法?

我抓取的所有请求(第一个除外)都是POST请求.它们交替使用两种类型的请求:粘贴一些数据,然后单击"下一步"转到下一页.

javascript python onclick scrapy web-scraping

24
推荐指数
1
解决办法
1万
查看次数

如何在抓取过程中动态生成start_urls?

我正在抓取一个网站,该网站可能包含很多start_urls,例如http://www.a.com/list_1_2_3.htm.

我想填充[list_\d + \ d +\d + .htm]之类的start_urls ,并在抓取过程中从[node_\d + .htm]等网址中提取项目.

我可以使用CrawlSpider来实现这个功能吗?如何在爬行中动态生成start_urls?

非常感谢!

web-crawler scrapy web-scraping

24
推荐指数
2
解决办法
2万
查看次数

如何在scrapy中实现嵌套项?

我正在使用复杂的分层信息来抓取一些数据,并且需要将结果导出到json.

我将这些项目定义为

class FamilyItem():
    name = Field()
    sons = Field()

class SonsItem():
    name = Field()
    grandsons = Field()

class GrandsonsItem():
    name = Field()
    age = Field()
    weight = Field()
    sex = Field()
Run Code Online (Sandbox Code Playgroud)

当蜘蛛完成时,我会得到一个打印的项目输出

{'name': 'Jenny',
   'sons': [
            {'name': u'S1',
             'grandsons': [
                   {'name': u'GS1',
                    'age': 18,
                    'weight': 50
                   },
                   {
                    'name':u'GS2',
                    'age': 19,
                    'weight':51}]
                   }]
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行时scrapy crawl myscaper -o a.json,它总是说结果"不是JSON可序列化的".然后我将项目输出复制并粘贴到ipython控制台并使用json.dumps(),它工作正常.所以问题出在哪里?这是我的疯狂......

python json scrapy

24
推荐指数
2
解决办法
8911
查看次数

如何从项目管道访问scrapy设置

如何从项目管道访问settings.py中的scrapy设置.文档提到可以通过扩展中的爬虫访问它,但我没有看到如何访问管道中的爬虫.

python settings pipeline scrapy

24
推荐指数
3
解决办法
2万
查看次数

ImportError:使用Scrapy时没有名为win32api的模块

我是Scrapy的新学习者.我安装了python 2.7和所有其他所需的引擎.

然后我尝试按照教程http://doc.scrapy.org/en/latest/intro/tutorial.html构建一个Scrapy项目.

在抓取步骤中,我键入后scrapy crawl dmoz 生成此错误消息

ImportError: No module named win32api.
[twisted] CRITICAL : Unhandled error in deferred
Run Code Online (Sandbox Code Playgroud)

我正在使用Windows.

堆栈跟踪:

在此输入图像描述
我正在使用Windows.

python scrapy scrapy-spider

24
推荐指数
2
解决办法
2万
查看次数