我正在为使用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发送特定请求的方式是什么?
我是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.谢谢!
我正在使用Scrapy抓取网页.当您点击某个按钮时,我只需弹出一些我需要的信息(当然,点击后也会出现在HTML代码中).
我发现Scrapy可以处理的形式(如登录)如图所示这里.但问题是没有形式可以填写,所以这不是我需要的.
如何只需单击一个按钮,然后显示我需要的信息?
我是否必须使用像mechanize或lxml这样的外部库?
如何使用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.
我正在练习'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(我在网上尝试过各种解决方案,但都没有用......真的很令人沮丧)
免责声明:我在StackOverflow上看过很多其他类似的帖子,并尝试以同样的方式做到这一点,但他们似乎没有在这个网站上工作.
我正在使用Python-Scrapy从koovs.com获取数据.
但是,我无法获得动态生成的产品大小.具体来说,如果有人可以通过此链接的下拉菜单指导我获取"不可用"尺寸标签,我将不胜感激.
我能够静态获取大小列表,但这样做我只获得大小列表,但不能获得哪些大小.
我想获得href值.
我试过这个:
<span class="title">
<a href="https://www.example.com"></a>
</span>
Run Code Online (Sandbox Code Playgroud)
但我只是得到了里面的文字href.
这是带有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)
我错过了一些配置项吗?
我有一个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框架内分享运行蜘蛛的任何提示?
通过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 ×10
scrapy ×10
web-scraping ×5
python-2.7 ×2
web-crawler ×2
celery ×1
django ×1
json ×1
report ×1