#python #web-scraping #scrapy
#python #очистка веб-страниц #scrapy
Вопрос:
Привет, ребята, я очень новичок в очистке данных, я попробовал базовый. Но моя проблема в том, что у меня есть 2 веб-страницы с одним и тем же доменом, которые мне нужно очистить
Моя логика такова: первая страница www.sample.com/view-all.html
* На этой странице открывается весь список элементов, и мне нужно получить все ссылки на каждый элемент.
Вторая страница www.sample.com/productpage.52689.html
* это ссылка, пришедшая с первой страницы, поэтому 52689 необходимо динамически изменять в зависимости от ссылки, предоставленной первой страницей.
Мне нужно получить все данные, такие как заголовок, описание и т.д., На второй странице.
я имею в виду цикл for, но он не работает с моей стороны. Я ищу в Google, но ни у кого нет такой же проблемы, как у меня. пожалуйста, помогите мне
import scrapy
class SalesItemSpider(scrapy.Spider):
name = 'sales_item'
allowed_domains = ['www.sample.com']
start_urls = ['www.sample.com/view-all.html', 'www.sample.com/productpage.00001.html']
def parse(self, response):
for product_item in response.css('li.product-item'):
item = {
'URL': product_item.css('a::attr(href)').extract_first(),
}
yield item`
Комментарии:
1. Scrapy не обязательно использовать
yield
элемент. Он можетyield
запросить () с URL и именем функции, которое будет очищено от этого URL. Этот способparse
может очищать URL-адреса с главной страницы и использоватьRequest()
для запуска другой функции для очистки от этих URL-адресов. У вас должно быть все в документации — docs.scrapy.org — Если вы заинтересованы в очистке, вам следует прочитать эту документацию с первой до последней страницы.
Ответ №1:
Внутри parse
вы можете yield
Request()
с помощью URL и имени функции очистить этот URL в другой функции
def parse(self, response):
for product_item in response.css('li.product-item'):
url = product_item.css('a::attr(href)').extract_first()
# it will send `www.sample.com/productpage.52689.html` to `parse_subpage`
yield scrapy.Request(url=url, callback=self.parse_subpage)
def parse_subpage(self, response):
# here you parse from www.sample.com/productpage.52689.html
item = {
'title': ...,
'description': ...
}
yield item
Ищите Request
в документации Scrapy и ее руководстве
Существует также
response.follow(url, callback=self.parse_subpage)
который автоматически добавит www.sample.com
к URL-адресам, поэтому вам не придется делать это самостоятельно в
Request(url = "www.sample.com/" url, callback=self.parse_subpage)
Смотрите Ярлык для создания запросов
Если вы заинтересованы в очистке, вам следует прочитатьdocs.scrapy.org от первой страницы до последней.
Комментарии:
1. Спасибо @furas, все работает, я прочитал документацию и понимаю функции. Я немного изменил предоставленный вами код, и теперь он работает нормально, спасибо