App store iTunes上的刮擦问题';应用商店

App store iTunes上的刮擦问题';应用商店,app-store,itunes,screen-scraping,scrapy,App Store,Itunes,Screen Scraping,Scrapy,我正在使用Scrapy从iTunes的AppStore数据库中获取一些数据。我从以下应用列表开始: 在下面的代码中,我使用了最简单的正则表达式,它针对美国商店中的所有应用 from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor from scrapy.contrib.spiders import CrawlSpider, Rule class AppStoreSpider(CrawlSpider): domain

我正在使用Scrapy从iTunes的AppStore数据库中获取一些数据。我从以下应用列表开始:

在下面的代码中,我使用了最简单的正则表达式,它针对美国商店中的所有应用

from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.contrib.spiders import CrawlSpider, Rule

class AppStoreSpider(CrawlSpider):
    domain_name = 'itunes.apple.com'
    start_urls = ['http://itunes.apple.com/us/genre/mobile-software-applications/id6015?mt=8']

    rules = (
        Rule(SgmlLinkExtractor(allow='itunes\.apple\.com/us/app'),
            'parse_app', follow=True,
        ),
    )

def parse_app(self, response):
    ....

SPIDER = AppStoreSpider()
当我运行它时,我收到以下信息:

 [itunes.apple.com] DEBUG: Crawled (200) <GET http://itunes.apple.com/us/genre/mobile-software-applications/id6015?mt=8> (referer: None)
 [itunes.apple.com] DEBUG: Filtered offsite request to 'itunes.apple.com': <GET http://itunes.apple.com/us/app/bloomberg/id281941097?mt=8>
回溯(最近一次呼叫最后一次): 文件“/usr/lib/python2.5/cookielib.py”,第1575行,在make_cookies中 解析\u ns\u头(ns\u hdr),请求) 文件“/usr/lib/python2.5/cookielib.py”,第1532行,在属性集的cookies中 cookie=self.\u cookie\u来自\u cookie\u元组(元组,请求) 文件“/usr/lib/python2.5/cookielib.py”,第1451行,在来自cokie-tuple的cokie-tuple中 如果版本不是None:version=int(版本) ValueError:基数为10的int()的文本无效:““1”

我在其他网站上使用了相同的脚本,我没有这个问题


有什么建议吗?

当我在浏览器中点击该链接时,它会自动尝试在本地打开iTunes。这可能是错误中提到的“异地请求”

我会尝试:

1) 从URL末尾删除“?mt=8”。它看起来无论如何都不需要,可能与请求有关


2) 在Scrapy Shell中尝试相同的请求。这是调试代码和尝试新事物的一种更简单的方法。这里有更多细节:

我看到这篇文章很老了,如果你还没有找到原因,就在这里

我在使用mechanize使用itunesconnect时遇到了类似的问题。在经历了很多挫折之后,我发现cookielib中有一个bug不能正确处理一些cookies。这里讨论的是:

那篇文章底部的补丁对我有用。为了方便,我将在这里转寄

基本上,您可以创建
cookielib.CookieJar的一个自定义子类
,从\u cookie\u元组重写
\u cookie\u,并使用此
CustomCookieJar
代替cookielib jar

class CustomCookieJar(cookielib.CookieJar):
    def _cookie_from_cookie_tuple(self, tup, request):
        name, value, standard, rest = tup
        version = standard.get("version", None)
        if version is not None:
            # Some servers add " around the version number, this module expects a pure int.
            standard["version"] = version.strip('"')
        return cookielib.CookieJar._cookie_from_cookie_tuple(self, tup,request) 

对于异地请求,请尝试将此属性添加到spider:
allowed\u domains=['apple.com']
class CustomCookieJar(cookielib.CookieJar):
    def _cookie_from_cookie_tuple(self, tup, request):
        name, value, standard, rest = tup
        version = standard.get("version", None)
        if version is not None:
            # Some servers add " around the version number, this module expects a pure int.
            standard["version"] = version.strip('"')
        return cookielib.CookieJar._cookie_from_cookie_tuple(self, tup,request)