如何从项目管道访问settings.py中的scrapy设置.文档提到可以通过扩展中的爬虫访问它,但我没有看到如何访问管道中的爬虫.
我有一个关于如何在scrapy中做这件事的问题.我有一只蜘蛛爬行列出物品页面.每次找到具有项目的列表页面时,都会调用parse_item()回调来提取项目数据和产生项目.到目前为止,一切都很好.
但是每个项目,除了其他数据之外,还有一个网址,其中包含有关该项目的更多详细信息.我想跟随该URL并在另一个项目字段(url_contents)中存储该项目的URL的获取内容.
而且我不确定如何组织代码来实现这一点,因为两个链接(列表链接和一个特定的项链接)遵循不同的方式,在不同的时间调用回调,但我必须在相同的项处理中关联它们.
到目前为止,我的代码如下所示:
class MySpider(CrawlSpider):
name = "example.com"
allowed_domains = ["example.com"]
start_urls = [
"http://www.example.com/?q=example",
]
rules = (
Rule(SgmlLinkExtractor(allow=('example\.com', 'start='), deny=('sort='), restrict_xpaths = '//div[@class="pagination"]'), callback='parse_item'),
Rule(SgmlLinkExtractor(allow=('item\/detail', )), follow = False),
)
def parse_item(self, response):
main_selector = HtmlXPathSelector(response)
xpath = '//h2[@class="title"]'
sub_selectors = main_selector.select(xpath)
for sel in sub_selectors:
item = ExampleItem()
l = ExampleLoader(item = item, selector = sel)
l.add_xpath('title', 'a[@title]/@title')
......
yield l.load_item()
Run Code Online (Sandbox Code Playgroud) 我是python的新手.我在64位操作系统上运行python 2.7.3版本32位.(我试过64位,但没有锻炼).
我按照教程在我的机器上安装了scrapy.我创建了一个项目demoz.但是当我输入scrapy crawl demoz它时显示错误.当我点击(C:\ python27\scripts)下的scrapy命令时,我遇到了这个东西,它显示:
C:\Python27\Scripts>scrapy
Scrapy 0.14.2 - no active project
Usage:
scrapy <command> [options] [args]
Available commands:
fetch Fetch a URL using the Scrapy downloader
runspider Run a self-contained spider (without creating a project)
settings Get settings values
shell Interactive scraping console
startproject Create new project
version Print Scrapy version
view Open URL in browser, as seen by Scrapy
Use "scrapy <command> -h" to see more info about a command
C:\Python27\Scripts>
Run Code Online (Sandbox Code Playgroud)
我想他们是安装中缺少的东西,任何人都可以帮助请...提前感谢..
我正在尝试从Google Play商店抓取最新评论,但我需要发帖请求以获取最新评论.
随着邮差它的工作,我得到了理想的回应.

但终端中的post请求给我一个服务器错误
例如:对于此页面https://play.google.com/store/apps/details?id=com.supercell.boombeach
curl -H "Content-Type: application/json" -X POST -d '{"id": "com.supercell.boombeach", "reviewType": '0', "reviewSortOrder": '0', "pageNum":'0'}' https://play.google.com/store/getreviews
Run Code Online (Sandbox Code Playgroud)
给出了服务器错误
Scrapy只是忽略了这一行:
frmdata = {"id": "com.supercell.boombeach", "reviewType": 0, "reviewSortOrder": 0, "pageNum":0}
url = "https://play.google.com/store/getreviews"
yield Request(url, callback=self.parse, method="POST", body=urllib.urlencode(frmdata))
Run Code Online (Sandbox Code Playgroud) 我正在使用Scrapy抓取几个可能共享冗余信息的网站.
对于我抓取的每个页面,我将页面的URL,标题和html代码存储到mongoDB中.我想避免数据库中的重复,因此,我实现了一个管道,以检查是否已经存储了类似的项目.在这种情况下,我提出DropItem异常.
我的问题是,每当我通过raison DropItem异常删除项目时,Scrapy会将项目的全部内容显示在日志(stdout或文件)中.由于我正在提取每个已删除页面的整个HTML代码,因此在丢弃的情况下,整个HTML代码将显示在日志中.
如果没有显示内容,我怎么能默默地删除项目?
感谢您的时间!
class DatabaseStorage(object):
""" Pipeline in charge of database storage.
The 'whole' item (with HTML and text) will be stored in mongoDB.
"""
def __init__(self):
self.mongo = MongoConnector().collection
def process_item(self, item, spider):
""" Method in charge of item valdation and processing. """
if item['html'] and item['title'] and item['url']:
# insert item in mongo if not already present
if self.mongo.find_one({'title': item['title']}):
raise DropItem('Item already in db')
else:
self.mongo.insert(dict(item))
log.msg("Item %s scraped" % item['title'], …Run Code Online (Sandbox Code Playgroud) 我想从控制台输出中删除所有DEBUG消息.有办法吗?
2013-06-08 14:51:48+0000 [scrapy] DEBUG: Telnet console listening on 0.0.0.0:6029
2013-06-08 14:51:48+0000 [scrapy] DEBUG: Web service listening on 0.0.0.0:6086
Run Code Online (Sandbox Code Playgroud)
文档告诉要设置一个LOG_LEVEL,但是......在哪个文件中?
回复,请参考这个目录结构.这是我的.另外,我在spyder文件夹中有一个'test.py'
tutorial/
scrapy.cfg
tutorial/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
Run Code Online (Sandbox Code Playgroud)
哪里.在哪个文件中,我必须如何设置log_level?
我scrapy用来屏蔽网站上的数据.但是,我想要的数据不在html本身内部,而是来自javascript.所以,我的问题是:
如何获取此类案例的值(文本值)?
这是我试图筛选的网站:https: //www.mcdonalds.com.sg/locate-us/
我想要的属性:地址,联系方式,营业时间.
如果您在Chrome浏览器中执行"右键单击","查看源代码",您将看到HTML中无法使用此类值.
编辑
Sry paul,我做了你告诉我的事情,找到admin-ajax.php并看到了身体但是,我现在真的被困住了.
如何从json对象中检索值并将其存储到我自己的变量字段中?如果您可以分享如何为公众和刚刚开始scrapy的人分享一个属性,那将是一件好事.
到目前为止,这是我的代码
Items.py
class McDonaldsItem(Item):
name = Field()
address = Field()
postal = Field()
hours = Field()
Run Code Online (Sandbox Code Playgroud)
McDonalds.py
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
import re
from fastfood.items import McDonaldsItem
class McDonaldSpider(BaseSpider):
name = "mcdonalds"
allowed_domains = ["mcdonalds.com.sg"]
start_urls = ["https://www.mcdonalds.com.sg/locate-us/"]
def parse_json(self, response):
js = json.loads(response.body)
pprint.pprint(js)
Run Code Online (Sandbox Code Playgroud)
Sry进行长时间编辑,简而言之,我如何将json值存储到我的属性中?例如
***项目['地址'] =*如何检索****
PS,不确定这是否有帮助,但是,我使用cmd行运行这些脚本
scrapy crawl mcdonalds -o McDonalds.json -t json(将我的所有数据保存到json文件中)
我不能强调我的感激之情.我知道问你这个是不合理的,即使你没有时间这个也完全没问题.
我有一个标签,我希望得到所有文本.我这样做:
response.css('mytag::text')
Run Code Online (Sandbox Code Playgroud)
但它只获取当前标记的文本,我还想从所有内部标记中获取文本.
我知道我可以这样做:
response.xpath('//mytag//text()')
Run Code Online (Sandbox Code Playgroud)
但我想用css选择器来做.我怎样才能做到这一点?
scrapy ×10
python ×9
web-crawler ×2
web-scraping ×2
css ×1
html ×1
pipeline ×1
python-2.7 ×1
scrapyd ×1
settings ×1