【发布时间】:2018-09-20 15:52:33
【问题描述】:
如何在scrapy 中使用regex?我搜索了很多,但找不到任何好的指导。但是,我尝试过如下操作,但它引发了一个异常,我将在下面粘贴。
import requests, re
from scrapy import Selector
LINK = 'http://www.viperinnovations.com/products-and-services/cableguardian'
def get_item(url):
res = requests.get(url)
sel = Selector(res)
email = re.findall(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+',sel)[0]
print(email)
if __name__ == '__main__':
get_item(LINK)
执行时抛出的异常:
Traceback (most recent call last):
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo.py", line 13, in <module>
get_item(LINK)
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo.py", line 9, in get_item
email = re.findall(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+',sel)[0]
File "C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\re.py", line 222, in findall
return _compile(pattern, flags).findall(string)
TypeError: expected string or bytes-like object
上面我的爬虫中的电子邮件只是一个占位符。我只想知道如何在scrapy 中使用regex。感谢您的帮助。
【问题讨论】:
-
A
Selector不是字符串,您可以使用它从原始数据中选择子字符串。所以我不确定你想让re.findall(…, sel)做什么。如果你想选择整个输入,你可以通过sel.extract()来做,但那是没有意义的;传递整个字符串比选择整个字符串并传递结果更容易。如果你想让它做一些不同的事情,你需要解释你真正想做的事情。
标签: python regex python-3.x web-scraping scrapy