- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是网络抓取的新手,刚开始尝试 Scrapy ,一个用 Python 编写的抓取框架。我的目标是抓取旧的 Yahoo Group,因为它们不提供 API 或任何其他方式来检索消息存档。 Yahoo Group 设置为您必须先登录才能查看文件。
我认为我需要完成的步骤是:
我开始粗略地制作一个 scrapy 蜘蛛来完成上述任务,这是我目前所拥有的。我想观察的是登录有效并且我能够检索第一条消息。一旦我完成了这么多工作,我就会完成剩下的工作:
class Sg101Spider(BaseSpider):
name = "sg101"
msg_id = 1 # current message to retrieve
max_msg_id = 21399 # last message to retrieve
def start_requests(self):
return [FormRequest(LOGIN_URL,
formdata={'login': LOGIN, 'passwd': PASSWORD},
callback=self.logged_in)]
def logged_in(self, response):
if response.url == 'http://my.yahoo.com':
self.log("Successfully logged in. Now requesting 1st message.")
return Request(MSG_URL % self.msg_id, callback=self.parse_msg,
errback=self.error)
else:
self.log("Login failed.")
def parse_msg(self, response):
self.log("Got message!")
print response.body
def error(self, failure):
self.log("I haz an error")
当我运行爬虫时,我看到它登录并发出对第一条消息的请求。但是,我在 scrapy 的调试输出中看到的只是 3 个重定向,最终到达了我首先要求的 URL。但是 scrapy 没有调用我的 parse_msg()
回调,并且爬行停止了。这是 scrapy 输出的片段:
2011-02-03 19:50:10-0600 [sg101] INFO: Spider opened
2011-02-03 19:50:10-0600 [sg101] DEBUG: Redirecting (302) to <GET https://login.yahoo.com/config/verify?.done=http%3a//my.yahoo.com> from <POST https://login.yahoo.com/config/login>
2011-02-03 19:50:10-0600 [sg101] DEBUG: Redirecting (meta refresh) to <GET http://my.yahoo.com> from <GET https://login.yahoo.com/config/verify?.done=http%3a//my.yahoo.com>
2011-02-03 19:50:12-0600 [sg101] DEBUG: Crawled (200) <GET http://my.yahoo.com> (referer: None)
2011-02-03 19:50:12-0600 [sg101] DEBUG: Successfully logged in. Now requesting 1st message.
2011-02-03 19:50:12-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?done=http%3A%2F%2Flaunch.groups.yahoo.com%2Fgroup%2FMyYahooGroup%2Fmessage%2F1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/message/1>
2011-02-03 19:50:12-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?check=G&done=http%3A%2F%2Flaunch%2Egroups%2Eyahoo%2Ecom%2Fgroup%2FMyYahooGroup%2Fmessage%2F1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?done=http%3A%2F%2Flaunch.groups.yahoo.com%2Fgroup%2FMyYahooGroup%2Fmessage%2F1>
2011-02-03 19:50:13-0600 [sg101] DEBUG: Redirecting (302) to <GET http://launch.groups.yahoo.com/group/MyYahooGroup/message/1> from <GET http://launch.groups.yahoo.com/group/MyYahooGroup/auth?check=G&done=http%3A%2F%2Flaunch%2Egroups%2Eyahoo%2Ecom%2Fgroup%2FMyYahooGroup%2Fmessage%2F1>
2011-02-03 19:50:13-0600 [sg101] INFO: Closing spider (finished)
2011-02-03 19:50:13-0600 [sg101] INFO: Spider closed (finished)
我无法理解这一点。看起来 Yahoo 正在重定向蜘蛛程序(可能是为了进行身份验证?),但它似乎回到了我最初想要访问的 URL。但是 scrapy 没有调用我的回调,我没有机会抓取数据或继续抓取。
有没有人对正在发生的事情和/或如何进一步调试有任何想法?谢谢!
最佳答案
我认为 Yahoo 正在重定向以进行授权检查,它最终将我重定向回了我真正想要访问的页面。然而,Scrapy 已经看到了这个请求,并且停止了,因为它不想进入循环。在我的例子中,解决方案是将 dont_filter=True
添加到 Request 构造函数。这将指示 Scrapy 不要过滤掉重复的请求。这对我来说很好,因为我事先知道我想要抓取哪些 URL。
def logged_in(self, response):
if response.url == 'http://my.yahoo.com':
self.log("Successfully logged in. Now requesting message page.",
level=log.INFO)
return Request(MSG_URL % self.msg_id, callback=self.parse_msg,
errback=self.error, dont_filter=True)
else:
self.log("Login failed.", level=log.CRITICAL)
关于python - 使用 scrapy 抓取雅虎组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893897/
所有, 我一直在一组文档上运行Y!LDA(https://github.com/shravanmn/Yahoo_LDA),结果看起来不错(或至少达到我的期望)。现在,我想使用产生的主题对语料库执行反向
我正在尝试订阅 onTimeIndexChanged 媒体播放器事件。只要我订阅的 View 保持专注,它就可以正常工作。当我按下后退按钮或小部件按钮时,我的 View 变得模糊并且不再接收事件。 这
我必须将 yahoo api 集成到我的应用程序中。谁能给我提供步骤吗? 由于我们已经集成了雅虎,所以我们从雅虎获得了一个 token key ,输入 key 后我们进入应用程序。在雅虎登录后是否有任
我直接从 Yahoo! 下载股票数据财务。 我比较两个日期的“Adj Closed”以获得增长率。例如,1987 年 7 月 20 日,KO(可口可乐)调整后的收盘值为 1.71,2013 年 7 月
我正在尝试遵循 Yahoo hadoop 教程: http://developer.yahoo.com/hadoop/tutorial/module3.html#vm 一切正常,直到我尝试根据“Ecl
我有现有的网络应用程序和专用的 Yahoo App在职的。它使用 OAuth2 Implicit Grant Flow 现在我想设置另一个按相同原理工作的域。我创建了新的 Yahoo App使用新的回
我正在使用 Dope-openid我网站上的图书馆,但在使用雅虎帐户登录时,用户会收到上面的消息 单击“同意”以使用您的 Yahoo! 登录 www.mywebsitename.com身份证。 警告:
我在以下网址找到了有关如何从Yahoo下载历史日内数据的在线文章:http://www.quantshare.com/sa-426-6-ways-to-download-free-intraday-a
这是我在雅虎上的问题的一种重新发布!论坛。只是我更频繁地提到 StackOverflow ...... 我的问题如下:而 Yahoo! OAuth http://developer.yahoo.com
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 8 年前。 Improve this ques
我如何从 yahoo api 接收到接收到的日期时间的特定时区? 默认时区是什么? http://hk.finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&
我如何从 yahoo api 接收到接收到的日期时间的特定时区? 默认时区是什么? http://hk.finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&
为了使用 jQuery 发出跨域 AJAX 请求,我尝试使用 YQL RSS。 select * from rss where url='https://www.top1000funds.com/fe
我知道我可以使用 jquery、.ajax 和 jsonp 进行跨域 ajax 调用。我正在调用雅虎股票报价 API。一切正常,结果正在返回(我可以使用 Fiddler 看到。)问题是我收到一个 js
我一直在开发一个使用雅虎财经的 json 获取股票数据的应用程序,但我在错误代码中遇到了问题。它在 else 语句中显示未解析的标识符 jsonDict 和预期的表达式错误。 这是代码。 import
这是 Yahoo Aviate Launcher 的屏幕截图之一: 我想做的就是这样。当用户滑动到启动器的最右侧页面(按字母顺序排列的应用程序列表)时,此屏幕截图的左侧仍然可以保留为左侧页面的一部分。
我正在尝试与基于 Django 的 Web 应用程序中现有商家帐户的 Yahoo! 的 Checkout API 集成。我已经成功地集成了他们的 Catalog API,但由于某种原因,我根本无法让
我每天都在处理 HTML 电子邮件营销事件,在过去的 24 小时内,我发现我所有的电子邮件都是左对齐的。这包括我之前构建的电子邮件事件(已在 Yahoo! Mail 中测试并用于对齐中心)。 有没有人
已关闭。这个问题是 off-topic 。目前不接受答案。 想要改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 已关闭10 年前。 Improve th
我正在尝试从 Yahoo! 检索市场数据财务和脚本多年来一直运行良好,但最近,它停止显示道琼斯数据。这是网址: http://download.finance.yahoo.com/d/quotes.c
我是一名优秀的程序员,十分优秀!