rajesh bojja
rajesh bojja

Reputation: 11

Attribute Error : 'Response' object has no attribute 'css'

When I tried this I am getting an Attribute Error : 'Response' object has no attribute 'css'

I tried with this code :

response.css('h1.ctn-article-title::text').extract()

can anyone help please?

i'm trying to get text "Update Primary Care" from below code which is title :

Update Primary Care CME

i'm placing my entire code :

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()

Upvotes: 0

Views: 2814

Answers (3)

Awaish Kumar
Awaish Kumar

Reputation: 557

add this line in your code and it will work fine remove any imports for requests from any other package.

from  scrapy.http import Request

Upvotes: 0

Granitosaurus
Granitosaurus

Reputation: 21436

As Tarun pointed out in the comments: You are mixing scrapy and requests code.

If you want to create a scrapy response from requests response you can try:

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!

See the docs for requests.Response and scrapy.http.TextResponse objects.

Upvotes: 3

jcoder
jcoder

Reputation: 237

In this case the line where your error occurs expects a CSSResponse object not a normal response. Try to create a CSSResponse instead of the normal Response to resolve the error.

You can get it here

More specifically use an HtmlResponse because your response would be some HTML and not plain text. HtmlResponse is a subclass of CSSResponse so it inherits the missing method.

Upvotes: 0

Related Questions