Python “无法使用”;regex“;勉强

Python “无法使用”;regex“;勉强,python,regex,python-3.x,web-scraping,scrapy,Python,Regex,Python 3.x,Web Scraping,Scrapy,如何在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 = S

如何在
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
回溯(最近一次呼叫最后一次):
文件“C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo.py”,第13行,在
获取项目(链接)
文件“C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\demo.py”,第9行,在get\u项中
电子邮件=回复findall(r'[a-zA-Z0-9+-]+@[a-zA-Z0-9-]+\[a-zA-Z0-9-]+\[a-zA-Z0-9-.]+',sel)[0]
文件“C:\Users\WCS\AppData\Local\Programs\Python\Python36-32\lib\re.py”,第222行,在findall中
返回编译(模式、标志).findall(字符串)
TypeError:应为字符串或类似字节的对象
上面我的刮板中的电子邮件只是一个占位符。我只想知道如何在
scrapy
中使用
regex
。感谢您的帮助。

A不是字符串,它是一个知道如何在HTML字符串或响应对象上运行查询以查找子元素的对象

一旦找到所需的一个或多个元素(如果有任何非单数查询,它将找到一个元素列表),
extract
方法将让您获得找到的一个或多个元素的文本

例如:

>>> Selector(text=body)
<Selector (text)>
>>> Selector(text=body).xpath('//span/text()')
<Selector (text) xpath=//title/text()>
>>> Selector(text=body).xpath('//span/text()').extract()
['First span', 'Second span', 'Third span']

选择器
不是字符串,它是一种可以用来从原始数据中选择子字符串的东西。所以我不确定您想要
re.findall(…,sel)
做什么。如果您想选择整个输入,可以通过
sel.extract()
,但这是毫无意义的;只传递整个字符串比选择整个字符串并传递结果更容易。如果你想让它做一些不同的事情,你需要解释一下你真正想做什么。谢谢@abarnert,提供了这么好的解决方案。非常感谢。
>>> [match
...  for text in Selector(text=body).xpath('//span/text()').extract()
...  for match in re.findall(r'[a-z]*\s', text)]
['irst ', 'econd ', 'hird ']