当我尝试这个时,我得到了一个Attribute Error : 'Response' object has no attribute 'css'
我尝试使用此代码:
response.css('h1.ctn-article-title::text').extract()
谁能帮忙?
我正在尝试从下面的代码中获取文本"更新初级保健",标题为:
更新初级保健 芝商所我放置了我的整个代码:
response = requests.get(url, headers = headers)
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'requests' is not defined
import requests
response = requests.get(url, headers = headers)
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'url' is not defined
url = 'somethingurl'
response = requests.get(url, headers = headers)
response.css('h1.ctn-article-title::text').extract()
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Response' object has no attribute 'css'
response.css('h1').extract()
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Response' object has no attribute 'css'
response.css('h1.ctn-article-title::text').extract()
正如Tarun在评论中指出的那样:你正在混合scrapy
和requests
代码。
如果要从请求响应创建抓取响应,可以尝试:
from scrapy.http import TextResponse
import requests
url = 'http://stackoverflow.com'
resp = requests.get(url)
resp = TextResponse(body=resp.content, url=url)
resp.xpath('//div')
# works!
有关请求,请参阅文档。Response 和 scrapy.http.TextResponse 对象。
在这种情况下,发生错误的行需要CSSResponse对象而不是正常响应。尝试创建 CSSResponse 而不是正常的响应来解决错误。
你可以在这里得到它
更具体地说,请使用 HtmlResponse,因为您的响应将是一些 HTML 而不是纯文本。HtmlResponse 是 CSSResponse 的一个子类,因此它继承了缺少的方法。
在你的代码中添加这一行,它会正常工作 从任何其他包中删除请求的任何导入。
from scrapy.http import Request