LinkedIn Scarping нескольких страниц - PullRequest
0 голосов
/ 24 октября 2019

Я знаю, что существует сомнение, разрешено ли очищение LinkedIn;но из следующей статьи: https://www.forbes.com/sites/emmawoollacott/2019/09/10/linkedin-data-scraping-ruled-legal/#787286c31b54

Я думаю, можно с уверенностью сказать, что удаление общедоступных данных из LinkedIn является законным.

Теперь я пытаюсь очистить поиск работы для конкретной работы. название в конкретном регионе. Пока все хорошо, все работает, за исключением ограничения количества очищенных заданий, равного 25.

Я пытаюсь использовать следующий трюк: внутри URL я передаю ключевое слово & start = X, где X идет отОт 0 до 25, 50 и т. Д.

В браузере это позволяет мне перейти к следующему просмотру страницы и извлечь оттуда задания. Однако при использовании scrapy этот метод не работает.

Код выглядит следующим образом:

res = requests.get('https://www.linkedin.com/jobs/search/?keywords={}&location={}&start=25'.format(job, location))

response = TextResponse(res.url, body=res.text, encoding='utf-8')

print("processing:" + response.url)

Вывод:

обработка: https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=0

Даже если я жестко закодирую его в 25 (стр. 2), он установит его в 0.

Есть идеи, как это решить?

1 Ответ

0 голосов
/ 24 октября 2019

Просто отключите RedirectMiddleware с параметром REDIRECT_ENABLED = 0 на оболочке scrapy.

scrapy shell -s REDIRECT_ENABLED=0 "https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=75"

_

2019-10-24 21:50:09 [scrapy.core.engine] DEBUG: Crawled (303) <GET https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=75> (referer: None)
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x0684AB30>
[s]   item       {}
[s]   request    <GET https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=75>


In [2]: fetch('https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=50')
2019-10-24 21:56:39 [scrapy.core.engine] DEBUG: Crawled (303) <GET https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=50> (referer: None)

In [3]: fetch('https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=100')
2019-10-24 21:56:49 [scrapy.core.engine] DEBUG: Crawled (303) <GET https://www.linkedin.com/jobs/search/?keywords=Data+Scientist&location=Brussels&start=100> (referer: None)

Например, если вы хотите, чтобы промежуточное ПО перенаправления игнорировало 301 и 302ответы (и передать их вашему пауку) вы можете сделать это:

class MySpider(CrawlSpider):
    handle_httpstatus_list = [301, 302]

Это промежуточное ПО обрабатывает перенаправление запросов на основе статуса ответа. https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#module-scrapy.downloadermiddlewares.redirect

...