gpt4 book ai didi

python - 通过凭据登录后,Scrapy 不会在 LinkedIn 上抓取数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:54 33 4
gpt4 key购买 nike

我正在尝试从添加了我的 linkedin 中的群组中抓取成员列表。

虽然当我运行我的代码时,我没有得到任何响应/值作为返回。还有一大堆错误。

我已经验证了我的 Parse 代码,它看起来不错。

这是我的代码:

import scrapy
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.http import Request
from scrapy.http import FormRequest

class LoginSpider(BaseSpider):
name = 'jiju'
start_urls = ['https://www.linkedin.com/groups/58888/members']

def parse(self, response):
return [FormRequest.from_response(response,
formdata={'username': 'myusername', 'password': 'mypassword'},
callback=self.after_login)]

def after_login(self, response):
# check login succeed before going on
if "authentication failed" in response.body:
self.log("Login failed", level=log.ERROR)
return
# We've successfully authenticated, let's have some fun!
else:
return Request(url="http://www.example.com/tastypage/",
callback=self.parse_tastypage)

def parse_tastypage(self, response):
for j in response.xpath('//*[@id="ember2299"]'):
yield {
'detail':j.xpath('//*[@id="ember2299"]/span').extract(),
}

这是我得到的回应。

C:\Users\Yash\tutorial\tutorial\spiders\jij.py:1: ScrapyDeprecationWarning: Module `scrapy.contrib.spiders` is deprecated, use `scrapy.spiders` instead
from scrapy.contrib.spiders.init import InitSpider
C:\Users\Yash\tutorial\tutorial\spiders\jij.py:1: ScrapyDeprecationWarning: Module `scrapy.contrib.spiders.init` is deprecated, use `scrapy.spiders.init` instead
from scrapy.contrib.spiders.init import InitSpider
C:\Users\Yash\tutorial\tutorial\spiders\jij.py:6: ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead
from scrapy.spider import BaseSpider
C:\Users\Yash\tutorial\tutorial\spiders\jiju.py:7: ScrapyDeprecationWarning: tutorial.spiders.jiju.LoginSpider inherits from deprecated class scrapy.spiders.BaseSpider, please inherit from scrapy.spiders.Spider. (warning only on first subclass, there may be others)
class LoginSpider(BaseSpider):
2018-08-03 00:51:07 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: tutorial)
2018-08-03 00:51:07 [scrapy.utils.log] INFO: Overridden settings: {'BOT_NAME': 'tutorial', 'NEWSPIDER_MODULE': 'tutorial.spiders', 'SPIDER_MODULES': ['tutorial.spiders']}
2018-08-03 00:51:07 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
'scrapy.extensions.telnet.TelnetConsole',
'scrapy.extensions.logstats.LogStats']
2018-08-03 00:51:07 [scrapy.middleware] INFO: Enabled downloader middlewares:
['scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware',
'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware',
'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware',
'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware',
'scrapy.downloadermiddlewares.retry.RetryMiddleware',
'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware',
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware',
'scrapy.downloadermiddlewares.redirect.RedirectMiddleware',
'scrapy.downloadermiddlewares.cookies.CookiesMiddleware',
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware',
'scrapy.downloadermiddlewares.stats.DownloaderStats']
2018-08-03 00:51:07 [scrapy.middleware] INFO: Enabled spider middlewares:
['scrapy.spidermiddlewares.httperror.HttpErrorMiddleware',
'scrapy.spidermiddlewares.offsite.OffsiteMiddleware',
'scrapy.spidermiddlewares.referer.RefererMiddleware',
'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware',
'scrapy.spidermiddlewares.depth.DepthMiddleware']
2018-08-03 00:51:07 [scrapy.middleware] INFO: Enabled item pipelines:
[]
2018-08-03 00:51:07 [scrapy.core.engine] INFO: Spider opened
2018-08-03 00:51:07 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2018-08-03 00:51:07 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6023
2018-08-03 00:51:07 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.linkedin.com/uas/login?session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fgroups%2F58888%2Fmembers> from <GET https://www.linkedin.com/groups/58888/members>
2018-08-03 00:51:08 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (302) to <GET https://www.linkedin.com/start/join?session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fgroups%2F58888%2Fmembers&trk=login_reg_redirect> from <GET https://www.linkedin.com/uas/login?session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fgroups%2F58888%2Fmembers>
2018-08-03 00:51:08 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.linkedin.com/start/join?session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fgroups%2F58888%2Fmembers&trk=login_reg_redirect> (referer: None)
2018-08-03 00:51:08 [scrapy.core.engine] DEBUG: Crawled (422) <POST https://www.linkedin.com/start/reg/api/createAccount> (referer: https://www.linkedin.com/start/join?session_redirect=https%3A%2F%2Fwww.linkedin.com%2Fgroups%2F58888%2Fmembers&trk=login_reg_redirect)
2018-08-03 00:51:08 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <422 https://www.linkedin.com/start/reg/api/createAccount>: HTTP status code is not handled or not allowed
2018-08-03 00:51:08 [scrapy.core.engine] INFO: Closing spider (finished)
2018-08-03 00:51:08 [scrapy.statscollectors] INFO: Dumping Scrapy stats:
{'downloader/request_bytes': 2810,
'downloader/request_count': 4,
'downloader/request_method_count/GET': 3,
'downloader/request_method_count/POST': 1,
'downloader/response_bytes': 20952,
'downloader/response_count': 4,
'downloader/response_status_count/200': 1,
'downloader/response_status_count/302': 2,
'downloader/response_status_count/422': 1,
'finish_reason': 'finished',
'finish_time': datetime.datetime(2018, 8, 2, 19, 21, 8, 574170),
'httperror/response_ignored_count': 1,
'httperror/response_ignored_status_count/422': 1,
'log_count/DEBUG': 5,
'log_count/INFO': 8,
'request_depth_max': 1,
'response_received_count': 2,
'scheduler/dequeued': 4,
'scheduler/dequeued/memory': 4,
'scheduler/enqueued': 4,
'scheduler/enqueued/memory': 4,
'start_time': datetime.datetime(2018, 8, 2, 19, 21, 7, 742810)}
2018-08-03 00:51:08 [scrapy.core.engine] INFO: Spider closed (finished)

最佳答案

问题:

Scrapy 试图访问 start_urls,在您的情况下是:https://www.linkedin.com/groups/58888/members .

由于此请求已发出且您尚未登录,LinkedIn 将您重定向到 https://www.linkedin.com/start/join,这是一个页面,用于创建新用户。

您的 parse 函数试图在此页面上找到一个表单,并使用您的凭据设置输入字段 usernamepassword。由于注册表单包含 password 字段,Scrapy 试图将包含您的数据的表单发布到 https://www.linkedin.com/start/reg/api/createAccount,失败,这就是 LinkedIn 返回 422 错误的原因。

解决方案:

在向 LinkedIn 发出任何请求之前,您需要确保您已登录。为此,您的 start_urls 应该包含登录页面。由于 LinkedIn 上的登录表单不使用 usernamepassword 字段,因此必须更改它们。您可以转到登录页面,检查这些字段并找到它们的名称。它们分别是:session_keysession_password。之后,您可以向您要解析的页面发出请求:

class LoginSpider(BaseSpider):
name = 'jiju'
start_urls = ['https://www.linkedin.com/uas/login']

def parse(self, response):
return FormRequest.from_response(response,
formdata={'session_key': 'your_login', 'session_password': 'your_pass'},
callback=self.after_login)

def after_login(self, response):
return Request(url="https://www.linkedin.com/groups/58888/members", callback=self.parse_members)

问题会更多。首先,LinkedIn使用JS代码和AJAX请求加载页面内容。所以以这种方式收到的响应可能不会包含您需要的数据。

如果你想执行 JS 代码并接收你在浏览器中看到的响应,你可以使用 Splash .无论如何,这样做之后,您将不得不与 reCAPTCHA 作斗争。您应该查看服务条款,看看它们是否允许爬虫或机器人,可能不允许。

关于python - 通过凭据登录后,Scrapy 不会在 LinkedIn 上抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660864/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com