我的小蜘蛛正在爬行论坛,但我不希望它爬行。
规则在json文件中:
#Current DataFrame
print(df)
Stock Ticker Index Ticker Price Date
AAPL INDX 100 12/31/2018 8:57
GOOG RSL 123 12/31/2018 8:57
GM COMP 90 12/31/2018 8:57
MMM NIKK 340 12/31/2018 8:57
INVD EUR 30 12/31/2018 8:57
#Desired results
print(df2)
Stock and Bench Price Date
AAPL 100 12/31/2018 8:57
INDX 100 12/31/2018 8:57
GOOG 123 12/31/2018 8:57
RSL 123 12/31/2018 8:57
GM 90 12/31/2018 8:57
COMP 90 12/31/2018 8:57
MMM 340 12/31/2018 8:57
NIKK 340 12/31/2018 8:57
INVD 30 12/31/2018 8:57
EUR 30 12/31/2018 8:57
我的蜘蛛正在加载json文件并解析规则。 allow和use_content在起作用,我的论坛规则似乎被忽略了。
"rules": [
{
"allow": ["\\/topic\/.*"],
"follow": true
},
{
"allow": ["\\/tr\\/article\\/.*.html"],
"follow": false,
"use_content": true
},
{
"deny": ["\/forum\/.*"],
"follow": false
},
有很多:
2018-12-31 07:45:30 [scrapy.core.engine]调试:已爬网(200)https://www.example.com/forum/online/News -...
我认为我的正则表达式错误地避免了/ forum /网址?
(尝试了多个 # add all rules from JSON file in a for loop:
deny_r = ()
if "deny" in rule.keys():
deny_r = [d for d in rule["deny"]]
Genspider.rules.append(Rule(
LinkExtractor(
allow=allow_r,
deny=deny_r,
restrict_xpaths=restrict_xpaths_r,
),
follow=rule["follow"],
callback='parse_item' if ("use_content" in rule.keys()) else None
))
,但似乎始终是同一个问题-尽管其他拒绝/关注错误似乎仍然有效)
答案 0 :(得分:1)
您需要在所有规则中添加拒绝。为什么?
中所述rules:这是一个(或多个)Rule对象的列表。每个规则都定义了用于爬网的特定行为。规则对象如下所述。如果多个规则与同一链接匹配,则将按照在此属性中定义的顺序使用第一个规则。
因此,如果前两个规则中的任何一个适用于论坛URL,除非为其定义了拒绝条目,否则将遵循该规则。
您的规则JSON应该看起来像这样
"rules": [
{
"deny": ["\/forum\/.*"],
"allow": ["\\/topic\/.*"],
"follow": true
},
{
"deny": ["\/forum\/.*"],
"allow": ["\\/tr\\/article\\/.*.html"],
"follow": false,
"use_content": true
}
]