我是使用Scrapy的新手,我想了解如何在CrawlSpider中使用规则.
如果我有一个规则,我在亚利桑那州图森市的蛋糕列表的黄页中爬行,那么如何产生一个URL请求激活规则 - 具体来说它是如何激活restrict_xpath属性的?
谢谢.
我无法理解如何在我自己的Spider中使用继承自CrawlSpider的规则字段.我的蜘蛛正试图爬过旧金山披萨的黄页列表.
我试图保持我的规则简单只是为了看看蜘蛛是否会爬过响应中的任何链接,但我不认为它发生了.我唯一的结果是它产生了下一页的请求,然后产生对后续页面的请求.
我有两个问题: 1.在收到响应时,蜘蛛在调用回调之前是否先处理规则?或相反亦然? 2.什么时候适用规则?
编辑: 我明白了.我从CrawlSpider覆盖了解析方法.在查看该类中的解析方法后,我意识到这是检查规则并通过这些网站进行爬网的地方.
注意:知道你要覆盖的是什么
这是我的代码:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy import Selector
from yellowPages.items import YellowpagesItem
from scrapy.http import Request
class YellowPageSpider(CrawlSpider):
name = "yellowpages"
allowed_domains = ['www.yellowpages.com']
businesses = []
# start with one page
start_urls = ['http://www.yellowpages.com/san-francisco-ca/pizza?g=san%20francisco%2C%20ca&q=pizza']
rules = (Rule (SgmlLinkExtractor()
, callback="parse_items", follow= True),
)
base_url = 'http://www.yellowpages.com'
def parse(self, response):
yield Request(response.url, callback=self.parse_business_listings_page)
def parse_items(self, response):
print "PARSE ITEMS. Visiting %s" % response.url
return …
Run Code Online (Sandbox Code Playgroud) 有没有办法阻止Spark工作人员通过终端?我知道脚本:start-all.sh,stop-all.sh,stop-workers.sh等.但是,每次运行start-all.sh时,似乎都有来自先前Spark集群实例的剩余工作程序也产生了.我知道这是因为Worker Id包含创建工作人员的日期和时间戳.
因此,当我今天运行start-all.sh时,我会看到在4月初创建的7个左右的工作人员.
有没有办法杀死这些早期的工人?或者也许是一种为他们的流程名称grep的方法?
全局指针在线程之间是否存在范围?
例如,假设我有两个文件,file1.c和file2.c:
file1.c中:
uint64_t *g_ptr = NULL;
modify_ptr(&g_ptr) {
//code to modify g_ptr to point to a valid address
}
read_from_addr() {
//code which uses g_ptr to read values from the memory it's pointing to
}
Run Code Online (Sandbox Code Playgroud)
file2.c中:
function2A() {
read_from_addr();
}
Run Code Online (Sandbox Code Playgroud)
所以我有threadA,它运行在file1.c中并执行modify_ptr(&g_ptr)和read_from_addr().然后threadB运行,它通过执行function2A()的file2.c运行.
我的问题是:threadB是否看到g_ptr被修改了?或者它仍然看到它指向NULL?
如果不是这样,那么指针是全局的意味着什么?如何确保在不同线程之间可以访问此指针?
如果我需要澄清任何事情,请告诉我.谢谢
在C中,是否将变量/值类型转换为一元运算?
要添加到这个是类型化整数值(可能在你应用掩码之前)也是一元操作?让我说我有
((uint64_t)1 << 30 & 0xFFFF0000FFFF0000LL)
Run Code Online (Sandbox Code Playgroud)
1填充零(最多64位),然后移位?