标签: scrapy

如何在scrapy中基于url过滤重复请求

我正在为使用CrawlSpider scrapy的网站编写一个爬虫.

Scrapy提供了一个内置的重复请求过滤器,可根据URL过滤重复的请求.此外,我可以使用CrawlSpider的规则成员过滤请求.

我想要做的是过滤以下请求:

http:://www.abc.com/p/xyz.html?id=1234&refer=5678
Run Code Online (Sandbox Code Playgroud)

如果我已经访问过

http:://www.abc.com/p/xyz.html?id=1234&refer=4567
Run Code Online (Sandbox Code Playgroud)

注意: refer是一个不影响我得到的响应的参数,所以我不在乎该参数的值是否发生变化.

现在,如果我有一个累积所有ID的集合,我可以在我的回调函数parse_item(这是我的回调函数)中忽略它来实现此功能.

但这意味着当我不需要时,我至少仍然会抓住那个页面.

那么我告诉scrapy它不应该基于url发送特定请求的方式是什么?

python web-crawler scrapy

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

如何获取scrapy失败的URL?

我是scrapy的新手,它是我知道的惊人的爬虫框架!

在我的项目中,我发送了超过90,000个请求,但其中一些请求失败了.我将日志级别设置为INFO,我只能看到一些统计信息,但没有详细信息.

2012-12-05 21:03:04+0800 [pd_spider] INFO: Dumping spider stats:
{'downloader/exception_count': 1,
 'downloader/exception_type_count/twisted.internet.error.ConnectionDone': 1,
 'downloader/request_bytes': 46282582,
 'downloader/request_count': 92383,
 'downloader/request_method_count/GET': 92383,
 'downloader/response_bytes': 123766459,
 'downloader/response_count': 92382,
 'downloader/response_status_count/200': 92382,
 'finish_reason': 'finished',
 'finish_time': datetime.datetime(2012, 12, 5, 13, 3, 4, 836000),
 'item_scraped_count': 46191,
 'request_depth_max': 1,
 'scheduler/memory_enqueued': 92383,
 'start_time': datetime.datetime(2012, 12, 5, 12, 23, 25, 427000)}
Run Code Online (Sandbox Code Playgroud)

有没有办法获得更多细节报告?例如,显示那些失败的URL.谢谢!

python report scrapy web-scraping

39
推荐指数
6
解决办法
3万
查看次数

单击Scrapy中的按钮

我正在使用Scrapy抓取网页.当您点击某个按钮时,我只需弹出一些我需要的信息(当然,点击后也会出现在HTML代码中).

我发现Scrapy可以处理的形式(如登录)如图所示这里.但问题是没有形式可以填写,所以这不是我需要的.

如何只需单击一个按钮,然后显示我需要的信息?

我是否必须使用像mechanize或lxml这样的外部库?

python web-crawler scrapy web-scraping

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

使用Scrapy刮擦JSON响应

如何使用Scrapy来抓取返回JSON的Web请求?例如,JSON看起来像这样:

{
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

我将寻找刮取特定项目(例如name,fax在上面)并保存到csv.

python json scrapy web-scraping

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

刮刮:SSL:http://en.wikipedia.org的CERTIFICATE_VERIFY_FAILED错误

我正在练习'Web Scraping with Python'的代码,我一直有这个证书问题:

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
import re

pages = set()
def getLinks(pageUrl):
    global pages
    html = urlopen("http://en.wikipedia.org"+pageUrl)
    bsObj = BeautifulSoup(html)
    for link in bsObj.findAll("a", href=re.compile("^(/wiki/)")):
        if 'href' in link.attrs:
            if link.attrs['href'] not in pages:
                #We have encountered a new page
                newPage = link.attrs['href'] 
                print(newPage) 
                pages.add(newPage) 
                getLinks(newPage)
getLinks("")
Run Code Online (Sandbox Code Playgroud)

错误是:

  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1049)>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我也在练习scrapy,但一直都在解决问题:找不到命令:scrapy(我在网上尝试过各种解决方案,但都没有用......真的很令人沮丧)

python beautifulsoup ssl-certificate scrapy web-scraping

37
推荐指数
13
解决办法
4万
查看次数

使用python-Scrapy刮擦动态内容

免责声明:我在StackOverflow上看过很多其他类似的帖子,并尝试以同样的方式做到这一点,但他们似乎没有在这个网站上工作.

我正在使用Python-Scrapy从koovs.com获取数据.

但是,我无法获得动态生成的产品大小.具体来说,如果有人可以通过链接的下拉菜单指导我获取"不可用"尺寸标签,我将不胜感激.

我能够静态获取大小列表,但这样做我只获得大小列表,但不能获得哪些大小.

python scrapy web-scraping

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

python scrapy使用css选择器获取href

我想获得href值.

我试过这个:

<span class="title">
  <a href="https://www.example.com"></a>
</span>
Run Code Online (Sandbox Code Playgroud)

但我只是得到了里面的文字href.

我怎么能得到href里面的链接

python scrapy python-2.7

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

Scrapy蜘蛛未找到错误

这是带有python 2.7的Windows 7

我在一个名为caps的目录中有一个scrapy项目(这是scrapy.cfg所在的位置)

我的蜘蛛位于caps\caps\spiders\campSpider.py中

我进入scrapy项目并尝试运行

scrapy crawl campSpider -o items.json -t json
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出无法找到蜘蛛.班级名称 campSpider

...
    spider = self.crawler.spiders.create(spname, **opts.spargs)
  File "c:\Python27\lib\site-packages\scrapy-0.14.0.2841-py2.7-win32.egg\scrapy\spidermanager.py", l
ine 43, in create
    raise KeyError("Spider not found: %s" % spider_name)
KeyError: 'Spider not found: campSpider'
Run Code Online (Sandbox Code Playgroud)

我错过了一些配置项吗?

python scrapy

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

在Celery任务中运行Scrapy蜘蛛

我有一个Django站点,当用户请求它时会发生刮擦,我的代码在新进程中启动Scrapy蜘蛛独立脚本.当然,这不会增加用户.

像这样的东西:

class StandAloneSpider(Spider):
    #a regular spider

settings.overrides['LOG_ENABLED'] = True
#more settings can be changed...

crawler = CrawlerProcess( settings )
crawler.install()
crawler.configure()

spider = StandAloneSpider()

crawler.crawl( spider )
crawler.start()
Run Code Online (Sandbox Code Playgroud)

我决定使用Celery并使用worker来排队爬网请求.

但是,我遇到了Tornado反应堆无法重启的问题.第一个和第二个蜘蛛成功运行,但后续的蜘蛛会抛出ReactorNotRestartable错误.

任何人都可以在Celery框架内分享运行蜘蛛的任何提示?

python django scrapy celery

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

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

通过pip安装Scrapy后,有Python 2.7.10:

scrapy
Traceback (most recent call last):
File "/usr/local/bin/scrapy", line 7, in <module>
from scrapy.cmdline import execute
File "/Library/Python/2.7/site-packages/scrapy/__init__.py", line 48,  
in <module>
from scrapy.spiders import Spider
File "/Library/Python/2.7/site-packages/scrapy/spiders/__init__.py",    
line 10, in <module>
from scrapy.http import Request
File "/Library/Python/2.7/site-packages/scrapy/http/__init__.py", line   
12, in <module>
from scrapy.http.request.rpc import XmlRpcRequest
File "/Library/Python/2.7/site-packages/scrapy/http/request/rpc.py",  
line 7, in <module>
from six.moves import xmlrpc_client as xmlrpclib
ImportError: cannot import name xmlrpc_client
Run Code Online (Sandbox Code Playgroud)

但我可以导入模块:

Python 2.7.10 (default, Jun 10 2015, 19:42:47) 
[GCC 4.2.1 Compatible Apple LLVM …
Run Code Online (Sandbox Code Playgroud)

python scrapy python-2.7

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