#python-3.x #python-requests #request #response
#python-3.x #python-запросы #запрос #ответ
Вопрос:
Я хочу извлечь все ссылки на парфюмерные бренды на этой веб-странице сайта.
Я бы подумал сделать scrapy scraper, который находит все ссылки, как я делал с BeautifulSoup:
soup = BeautifulSoup(requests.get('https://www.nosetime.com' url,
headers=headers).content, 'html.parser')
print(soup)
result = soup.find_all('a', {'class': 'imgborder'})
for r in result:
brand_url = r.attrs['href']
requests.get возвращает объект ответа здесь
Но этот самодельный метод дает сбой с ошибками merry 403, поэтому я подумал о создании scrapy scraper, поскольку в этом руководстве утверждается, что он может справиться с этим.
import scrapy
from bs4 import BeautifulSoup
class NosetimeScraper(scrapy.Spider):
name = "nosetime"
urls = ['/pinpai/2-a.html']
start_urls = ['https://www.nosetime.com' url for url in urls]
def parse(self, response):
# proceed to other pages of the listings
soup = BeautifulSoup(response.content, 'html.parser')
results = soup.find_all('a', {'class': 'imgborder'})
for r in results:
brand_url = r.attrs['href']
yield scrapy.Request(url=brand_url, callback=self.parse)
# then do something with the scrapy.Request() response that has been yielded ...
Но он возвращает:
soup = BeautifulSoup(response.content, 'html.parser')
AttributeError: 'HtmlResponse' object has no attribute 'content'
Итак, я предполагаю, что есть разница между запросами HtmlResponse.response ?
Ответ №1:
Это потому scrapy.http.HtmlResponse
, что отличается от requests.models.Response
. Вы можете использовать response.body
вместо этого.
Но было бы намного лучше использовать .css()
с Scrapy:
def parse(self, response):
urls = response.css('a.imgborder::attr(href)').getall()
for url in urls:
yield scrapy.Request(url=url, callback=self.parse)
Комментарии:
1. Спасибо, у вас есть учебник или ресурсы о том, как выполнять очистку с помощью CSS? Я больше привык делать это с помощью beautifulsoup
2. Ознакомьтесь с документами MDN от Mozilla: developer.mozilla.org/en-US/docs/Web/CSS/CSS_Selectors . Вы всегда можете протестировать свои селекторы в devtools, нажав F12 . Этого уже достаточно для большинства сайтов, но если вам нужна большая гибкость, подумайте и об изучении xpath, он вызывается с
.xpath()
помощью .