Проблема Scrapy с iTunes 'AppStore - PullRequest
       20

Проблема Scrapy с iTunes 'AppStore

2 голосов
/ 11 апреля 2010

Я использую Scrapy для получения некоторых данных из базы данных iTunes 'AppStore. Я начинаю с этого списка приложений: http://itunes.apple.com/us/genre/mobile-software-applications/id36?mt=8

В следующем коде я использовал простейшее регулярное выражение, предназначенное для всех приложений в магазине США.

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>

Как вы можете видеть, когда он начинает сканировать первую страницу, он говорит: «Отфильтрован внешний запрос на itunes.apple.com». и тогда паук останавливается .. он также возвращает это сообщение:

[ScrapyHTTPPageGetter,client] /usr/lib/python2.5/cookielib.py:1577: exceptions.UserWarning: cookielib bug!

Traceback (последний вызов был последним): Файл "/usr/lib/python2.5/cookielib.py", строка 1575, в make_cookies parse_ns_headers (ns_hdrs), запрос) Файл "/usr/lib/python2.5/cookielib.py", строка 1532, в _cookies_from_attrs_set cookie = self._cookie_from_cookie_tuple (tup, request) Файл "/usr/lib/python2.5/cookielib.py", строка 1451, в _cookie_from_cookie_tuple если версия не None: версия = int (версия) ValueError: недопустимый литерал для int () с основанием 10: '"1"'

Я использовал тот же скрипт для другого сайта, и у меня не было этой проблемы.

Есть предложения?

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Я вижу, что это сообщение довольно старое, если вы еще не выяснили причину, вот оно.

Я сталкиваюсь с подобной проблемой при работе с itunesconnect с использованием mechanize. После большого разочарования я обнаружил, что в cookielib есть ошибка, которая неправильно обрабатывает некоторые куки. Здесь обсуждается: http://bugs.python.org/issue3924

Исправление внизу этого поста сработало для меня. Я сделаю репост здесь для удобства.

В основном вы создаете пользовательский подкласс cookielib.CookieJar, переопределяете _cookie_from_cookie_tuple и используете этот CustomCookieJar вместо баночки cookielib

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) 
1 голос
/ 12 мая 2010

Когда я нажимаю эту ссылку в браузере, он автоматически пытается открыть iTunes локально. Это может быть «внешний запрос», упомянутый в ошибке.

Я бы попробовал:

1) Удалите «? Mt = 8» из конца URL. Похоже, что это все равно не нужно, и это может быть связано с запросом.

2) Попробуйте выполнить тот же запрос в Scrapy Shell. Это гораздо более простой способ отладки вашего кода и пробовать новые вещи. Подробнее здесь: http://doc.scrapy.org/topics/shell.html?highlight=interactive

...