Это 3-й день моего участия в ноябрьском испытании обновлений, узнайте подробности события:Вызов последнего обновления 2021 г.
Описание скрапа ?
Scrapy — это платформа приложений, написанная для сканирования данных веб-сайта и извлечения структурных данных.
Платформа Scrapy в основном состоит из пяти компонентов, а именно планировщика, загрузчика, паука, конвейера элементов и механизма Scrapy. Планировщик получает URL-адрес и инициирует запрос. Загрузчик загружает контент, обрабатывает бесполезные данные через движок и промежуточное программное обеспечение и отправляет их пауку. Мы извлекаем данные в соответствии с нашими собственными потребностями. Если запрос выполнен успешно, данные сохраняются в элементах и хранятся в конвейере. Если это не удается, он повторно отправит URL-адрес планировщику.
Создать проект Scrapy ?
Сначала загрузите и установите scrapy:pip install Scrapy
Создайте скрап-проект:scrapy startproject movieScrapy
, имя моего проекта — movieScrapy; создайте файл сканера под пауками:scrapy genspider spiderData 你要访问的网页域名
Так выглядит созданная структура каталогов
items.py эквивалентен классу инкапсуляции, используемому для инкапсуляции данных, которые должны быть переданы в конвейер; middlewares.py — промежуточное ПО, которое обычно не нужно писать; это файл конфигурации
Для начала изменим конфигурационный файл настроек
ROBOTSTXT_OBEY = False
По умолчанию стоит True, меняем на False, так как если соблюдать протокол robots, много чего не получим;CONCURRENT_REQUESTS = 32
Максимальный одновременный запрос, по умолчанию 16, чем больше, тем лучше;DOWNLOAD_DELAY = 2
Задержка загрузки может предотвратить блокировку IP-адреса, если количество посещений слишком велико;COOKIES_ENABLED = True
По умолчанию сохраняется файл cookie последнего посещения;DEFAULT_REQUEST_HEADERS = {}
Заголовок запроса, который может писать User-Agent, Cookie, Referer;ITEM_PIPELINES
Воронка проекта, приоритет 300, чем ниже приоритет, тем выше приоритет сканирования
Скиньте картинки ❤
Сегодняшняя задача - ползать по картинкам, спешить спешить! ! !
items.py
Определим нужные нам поля в items.py, чтобы упростить конвейерную передачу.
import scrapy
class MoviescrapyItem(scrapy.Item):
# 图片名称
name = scrapy.Field()
# 图片地址
url = scrapy.Field()
файл сканера.py
Полный код в каталоге файлов сканера, я буду использовать xxx вместо подробного URL-адреса.
class SpiderdataSpider(scrapy.Spider):
name = 'spiderData'
allowed_domains = ['x.com']
start_urls = ['https://x.com/x/x/']
def parse(self, response):
articles = response.xpath("//div[@class='galleryWrapper']/section/section/section/section/article")
for article in articles:
url = article.xpath("./section/section/a/@href").extract()[0]
yield scrapy.Request(url, callback=self.MainUrl)
def MainUrl(self, response):
data = response.text
name = response.xpath("//div[@class='image_name']/text()").extract()[0]
url = response.xpath("//section[@class='image-card']/section/figure/div[@class='unzoomed']/img/@src").extract()[0]
url = "https:" + url
item = MoviescrapyItem()
item['name'] = name
item['url'] = url
yield item
name = 'spiderData'
Файл запуска через это имяscrapy crawl spiderData
;allowed_domains = ['x.com']
Это не означает, что ссылки под этим доменным именем будут автоматически фильтроваться, имя и разрешенные_домены автоматически генерируются при создании файла;
Ответ в функции разбора автоматически загрузил ресурс данных, доступ к которому можно получить черезresponse.text
Для просмотра можно получить нужные данные в каталоге через xpath, гдеextract()[0]
текст можно извлечь
yield scrapy.Request(url, callback=self.MainUrl)
Мы непрерывно извлекаем ссылку на страницу сведений об изображении в цикле и передаемyield
инициировать запрос, а также функционироватьMainUrl
В качестве функции обратного вызова для извлечения необходимых данных из ответа.yield
Данные возвращаются в каждом цикле
item = MoviescrapyItem()
Создавать полученные данные черезyield
к трубопроводу
pipelines.py
import urllib.request
class MoviescrapyPipeline:
def __init__(self):
pass
def process_item(self, item, spider):
name = item['name']
urllib.request.urlretrieve(item['url'], "./Loadimg/" + name + '.jpg')
return item
def close_spider(self, spider):
pass
__init__
Функция выполняется в начале, мы можем использовать ее для подготовки открытия файла хранилища и некоторых настроек, таких как csvprocess_item
Это для обработки данных, здесь мы сохраняем картинку, item — это значение, которое мы передали через yield передclose_spider
Мы можем использовать, чтобы закрыть файл csv, как это
Таким образом получается картинка ???