我目前收到此错误,不知道是什么意思.它是一个scrapy python项目,这是我看到的错误:
File "/bp_scraper/bp_scraper/httpmiddleware.py", line 22, in from_crawler return cls(crawler.settings) File "/bp_scraper/bp_scraper/httpmiddleware.py", line 12, in __init__ if parts[1]: TypeError: '_sre.SRE_Match' object has no attribute '__getitem__'
代码:
import re import random import base64 from scrapy import log class RandomProxy(object): def __init__(self, settings): self.proxy_list = settings.get('PROXY_LIST') f = open(self.proxy_list) self.proxies = {} for l in f.readlines(): parts = re.match('(\w+://)(\w+:\w+@)?(.+)', l) if parts[1]: parts[1] = parts[1][:-1] self.proxies[parts[0] + parts[2]] = parts[1] f.close() @classmethod def from_crawler(cls, crawler): return cls(crawler.settings)
在此先感谢您的帮助!
您不能通过以下方式访问匹配的结果:
if parts[1]: parts[1] = parts[1][:-1]
而是这样做
if parts: matched = parts.group(1)[:-1]
有关正则表达式匹配组的更多信息,请点击这里
re.match
调用的结果是一个SRE_Match
对象,它不支持[]
运算符(aka __getitem__
).我想你想要的
if parts is not None: if parts.group(1): <blah>
不幸的是,parts.group(1)
它不是可变的,因此您必须创建另一个变量来保存您想要对其进行的更改.