Итак, я работал над созданием веб-скребка со скрэпом и проходил некоторую проверку данных, чтобы убедиться, что все элементы были правильно собраны.
Я использую его для сбора средних данных о заголовках статей, именах, хлопках, ответах и т. Д. c, которые находятся на одной странице html. Но чтобы получить теги, мне нужно было go для каждой отдельной статьи. Большинство тегов мне удалось получить, но есть пара статей, которые ссылаются на www.didascience.com вместо среднего веб-сайта. Это делает странный маленький редирект, когда ссылка на статью, например,
https://towardsdatascience.com/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd?source=tag_archive---------1-----------------------
Затем он перенаправляет на: https://towardsdatascience.com/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd
Теперь я заметил, что в статьях, которые перенаправляют на страницу со статистикой по направлению к данным, он не захватывает теги страниц. Селектор тега css точно такой же, как и другие статьи среднего уровня, которые он захватывает.
Когда я go нахожусь на оболочке scrapy и пытаюсь получить одну из статей, которая ссылается на статью о сбое, я получаю этот ответ.
fetch("https://towardsdatascience.com/cython-a-speed-up-tool-for-your-python-function-9bab64364bfd?
source=tag_archive---------1-----------------------")
**OUTPUT**
2020-02-16 11:52:31 [scrapy_user_agents.middlewares] DEBUG: Assigned User-Agent Mozilla/5.0 (Windows
NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36
2020-02-16 11:52:31 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET
https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Fcython-a-
speed-up-tool-for-your-python-function-9bab64364bfd%3Fsource%3Dtag_archive---------1-----------------
------> from <GET https://towardsdatascience.com/cython-a-speed-up-tool-for-your-python-function-
9bab64364bfd?source=tag_archive---------1----------------------->
2020-02-16 11:52:31 [scrapy.downloadermiddlewares.robotstxt] DEBUG: Forbidden by robots.txt: <GET
https://medium.com/m/global-identity?redirectUrl=https%3A%2F%2Ftowardsdatascience.com%2Fcython-a-
speed-up-tool-for-your-python-function-9bab64364bfd%3Fsource%3Dtag_archive---------1-----------------
------>
Файл robots.txt находится здесь
User-Agent: *
Disallow: /m/
Disallow: /me/
Disallow: /@me$
Disallow: /@me/
Disallow: /*/edit$
Disallow: /*/*/edit$
Disallow: /r/
Disallow: /t/
Disallow: /search?q$
Disallow: /search?q=
Allow: /_/
Allow: /_/api/users/*/meta
Allow: /_/api/users/*/profile/stream
Allow: /_/api/posts/*/responses
Allow: /_/api/posts/*/responsesStream
Allow: /_/api/posts/*/related
Sitemap: https://towardsdatascience.com/sitemap/sitemap.xml
Я пробовал несколько способов работы с перенаправлениями с использованием scrapy с этого веб-сайта и не имел никакого успеха. Вот код для реального сканера.
CODE
import scrapy
from dateutil.parser import parse
from medium.items import MediumItem
from scrapy.spiders import CrawlSpider
class DataSpider(CrawlSpider):
name = 'data'
allowed_domains = ['medium.com', 'towardsdatascience.com']
start_urls = ['https://medium.com/tag/python/archive/2020/02/01']
def parse(self,response):
articles = response.xpath('//div[@class="postArticle postArticle--short js-postArticle js-
trackPostPresentation js-trackPostScrolls"]')
for article in articles:
item = MediumItem()
if article.css("div > h3::text").extract_first():
item['Title'] = article.css("div > h3::text").extract_first()
item['Name'] = article.xpath('.//a[@class="ds-link ds-link--styleSubtle link link--
darken link--accent u-accentColor--textNormal u-accentColor--
textDarken"]/text()').extract_first()
item['Date'] = parse(article.css('time::text').extract_first()).date()
item['Read'] = article.css("span::attr(title)").extract_first()
item['Publication'] = article.xpath('.//a[@class="ds-link ds-link--styleSubtle link--
darken link--accent u-accentColor--textNormal"]/text()').extract_first()
item['Claps'] = articles.xpath('.//button[@class="button button--chromeless u-baseColor-
-buttonNormal js-multirecommendCountButton u-
disablePointerEvents"]/text()').extract_first()
item['Responses'] = article.xpath('.//a[@class="button button--chromeless u-baseColor--
buttonNormal"]/text()').extract_first()
link = article.xpath('.//a[@class="button button--smaller button--chromeless u-
baseColor--buttonNormal"]/@href').extract_first()
yield response.follow(link, callback=self.get_link, meta={'item':item})
def get_link(self,response):
item = response.meta['item']
item['Tags'] = response.css("ul > li > a::text").getall()
yield item
Любая помощь в получении тегов с тех страниц, как та, на которую ссылается, будет отличной.