Парсинг сайтов с помощью фреймворка Scrapy

Обсуждение материалов сайта: вопросы, замечания, предложения
Ответить
Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Denis Rykov » 03 янв 2013, 14:55

Парсинг сайтов с помощью фреймворка Scrapy
Написал статью, просьба покритиковать.
Spatial is now, more than ever, just another column- The Geometry Column.

boss
Новоприбывший
Сообщения: 3
Зарегистрирован: 14 фев 2016, 01:26
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение boss » 14 фев 2016, 01:29

Подскажите в чем может быть причина ошибок
при создании проекта
scrapy startproject abitur

Получаю много Traceback
В чем может быть причина

Код: Выделить всё

E:\python>c:\python27\scripts\scrapy.exe startproject name
Traceback (most recent call last):
  File "C:\Python27\lib\runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  File "C:\Python27\lib\runpy.py", line 72, in _run_code
    exec code in run_globals
  File "c:\python27\scripts\scrapy.exe\__main__.py", line 9, in <module>
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 122, in execute
    cmds = _get_commands_dict(settings, inproject)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 46, in _get_commands_dict
    cmds = _get_commands_from_module('scrapy.commands', inproject)
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 29, in _get_commands_from_module
    for cmd in _iter_command_classes(module):
  File "C:\Python27\lib\site-packages\scrapy\cmdline.py", line 20, in _iter_command_classes
    for module in walk_modules(module_name):
  File "C:\Python27\lib\site-packages\scrapy\utils\misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "C:\Python27\lib\importlib\__init__.py", line 37, in import_module
    __import__(name)
  File "C:\Python27\lib\site-packages\scrapy\commands\version.py", line 6, in <module>
    import OpenSSL
  File "C:\Python27\lib\site-packages\OpenSSL\__init__.py", line 8, in <module>
    from OpenSSL import rand, crypto, SSL
  File "C:\Python27\lib\site-packages\OpenSSL\rand.py", line 11, in <module>
    from OpenSSL._util import (
  File "C:\Python27\lib\site-packages\OpenSSL\_util.py", line 6, in <module>
    from cryptography.hazmat.bindings.openssl.binding import Binding
ImportError: No module named cryptography.hazmat.bindings.openssl.binding


ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение ericsson » 14 фев 2016, 03:58


boss
Новоприбывший
Сообщения: 3
Зарегистрирован: 14 фев 2016, 01:26
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение boss » 23 фев 2016, 20:56

Есть код: делов том что на разных страницах порядок может быть другой
к примеру

Код: Выделить всё

<ul class="list-unstyled">
<li><b>Продолжительность:</b>&nbsp;97 мин.</li><br>
<li><b>Жанр:</b>&nbsp;<a href="/film/al/" itemprop="genre">Мелодрама</a>.</li>
<li><b>Страна:</b>&nbsp;<a href="/film/fo/">Россия</a>.</li>
<li><b>Режиссер:</b>&nbsp;<a href="/star/68166/">Дмитрий Константинов</a>.</li>
<li><b>Сценарий:</b>&nbsp;<a href="/star/68166/">Дмитрий Константинов</a>.</li>
<li><b>Продюсеры:</b>&nbsp;<a href="/star/22142/">Рубен Дишдишян</a>.</li>
<li><b>Оператор:</b>&nbsp;<a href="/star/137587/">Андрей Гуркин</a>.</li>
<li><b>Художник:</b>&nbsp;<a href="/star/3339230/">Игорь Тихонов</a>
</ul>


я указал только часть кода
div class="col-xs-10 col-md-8" пропустил

Код: Выделить всё

  
sel.xpath('//div[@class="col-xs-10 col-md-8"]/ul[@class="list-unstyled"]/li[1]/text()').extract()
парсит продолжительность фильма. Мы получаем 97 мин.
но проблема в том что указывать индекс в таком случае li нельзя.

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

Код: Выделить всё

  
sel.xpath('//div[@class="col-xs-10 col-md-8"]/ul[@class="list-unstyled"]/li/b[text() = "%s"]' % u"Продолжительность:" ).extract()
Мы получим значение Продолжительность а нужно 97 мин.

Подскажите как верно составлять запросы

Аватара пользователя
Denis Rykov
Гуру
Сообщения: 3376
Зарегистрирован: 11 апр 2008, 21:09
Репутация: 529
Ваше звание: Author
Контактная информация:

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Denis Rykov » 25 фев 2016, 14:05

Код: Выделить всё

sel.xpath('//div[@class="col-xs-10 col-md-8"]/ul[@class="list-unstyled"]/li/b[text() = "%s"]/following-sibling::text()[1]' % u"Продолжительность:" ).extract()
Spatial is now, more than ever, just another column- The Geometry Column.

boss
Новоприбывший
Сообщения: 3
Зарегистрирован: 14 фев 2016, 01:26
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение boss » 02 апр 2016, 13:58

не могу разобраться с pipelines.py
Составил код для обработки данных с парсинга

Код: Выделить всё

f = list(open(ur'cities.txt','r'))
cities = {}
for i in f:
    cities[i.split(',')[1:2][0]] = i.split(',')[0:1][0]

class RabotaPipeline(object):
    def process_item(self, item, spider):
		global cities
		if item['strana']:
			item['strana'] = cities[item['strana']]
			return item
		else:
			pass		
        return item
Есть

Код: Выделить всё

l.add_xpath('strana', '//div[@id="job-details"]/*/span[@itemprop="jobLocation"]/text()')
CSV я получаю название страны. но мне нужно получать его айди
в словаре cities где ключ эта стана а значение айди.
Мне нужно выводить в csv обработаное значение.



и ещё вопрос мне нужно сохранять данные в формате sql создать дам базы.
Если есть возможность покажите простой пример как это делать а дальше я уже сам буду разбираться. Главное понять и начать.

Alice
Новоприбывший
Сообщения: 3
Зарегистрирован: 16 июн 2016, 10:41
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Alice » 16 июн 2016, 10:50

Здравствуйте.
Возникла проблема с sgmllib при запуске scrapy:

Код: Выделить всё

/usr/lib/python3.4/importlib/_bootstrap.py:321: ScrapyDeprecationWarning: Module `scrapy.contrib.spiders` is deprecated, use `scrapy.spiders` instead
  return f(*args, **kwds)
/usr/lib/python3.4/importlib/_bootstrap.py:321: ScrapyDeprecationWarning: Module `scrapy.contrib.linkextractors` is deprecated, use `scrapy.linkextractors` instead
  return f(*args, **kwds)
/usr/lib/python3.4/importlib/_bootstrap.py:321: ScrapyDeprecationWarning: Module `scrapy.contrib.linkextractors.sgml` is deprecated, use `scrapy.linkextractors.sgml` instead
  return f(*args, **kwds)
Traceback (most recent call last):
  File "/usr/local/bin/scrapy", line 11, in <module>
    sys.exit(execute())
  File "/usr/local/lib/python3.4/dist-packages/scrapy/cmdline.py", line 141, in execute
    cmd.crawler_process = CrawlerProcess(settings)
  File "/usr/local/lib/python3.4/dist-packages/scrapy/crawler.py", line 238, in __init__
    super(CrawlerProcess, self).__init__(settings)
  File "/usr/local/lib/python3.4/dist-packages/scrapy/crawler.py", line 129, in __init__
    self.spider_loader = _get_spider_loader(settings)
  File "/usr/local/lib/python3.4/dist-packages/scrapy/crawler.py", line 325, in _get_spider_loader
    return loader_cls.from_settings(settings.frozencopy())
  File "/usr/local/lib/python3.4/dist-packages/scrapy/spiderloader.py", line 33, in from_settings
    return cls(settings)
  File "/usr/local/lib/python3.4/dist-packages/scrapy/spiderloader.py", line 20, in __init__
    self._load_all_spiders()
  File "/usr/local/lib/python3.4/dist-packages/scrapy/spiderloader.py", line 28, in _load_all_spiders
    for module in walk_modules(name):
  File "/usr/local/lib/python3.4/dist-packages/scrapy/utils/misc.py", line 71, in walk_modules
    submod = import_module(fullpath)
  File "/usr/lib/python3.4/importlib/__init__.py", line 109, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 2254, in _gcd_import
  File "<frozen importlib._bootstrap>", line 2237, in _find_and_load
  File "<frozen importlib._bootstrap>", line 2226, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1200, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 1129, in _exec
  File "<frozen importlib._bootstrap>", line 1471, in exec_module
  File "<frozen importlib._bootstrap>", line 321, in _call_with_frames_removed
  File "/root/orphanage/orphanage/spiders/detskiedomiki.py", line 2, in <module>
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
  File "/usr/local/lib/python3.4/dist-packages/scrapy/contrib/linkextractors/sgml.py", line 7, in <module>
    from scrapy.linkextractors.sgml import *
  File "/usr/local/lib/python3.4/dist-packages/scrapy/linkextractors/sgml.py", line 6, in <module>
    from sgmllib3 import SGMLParser
ImportError: No module named 'sgmllib3'

Alice
Новоприбывший
Сообщения: 3
Зарегистрирован: 16 июн 2016, 10:41
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Alice » 16 июн 2016, 11:04

А всё, сама разобралась - у вас немного устаревший код, теперь нужно использовать

Код: Выделить всё

from scrapy.linkextractors import LinkExtractor

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Александр Мурый » 16 июн 2016, 11:22

В статье, как я понял, используется Python 2.7.*, а у вас 3.4. Может быть, из-за этого не сработало? Или таки надо текст обновить? Тогда попросим автора.
Редактор материалов, модератор форума

Alice
Новоприбывший
Сообщения: 3
Зарегистрирован: 16 июн 2016, 10:41
Репутация: 0

Re: Парсинг сайтов с помощью фреймворка Scrapy

Сообщение Alice » 16 июн 2016, 11:39

Ну, раз статья для второго питона, возможно, это и сработает на втором питоне.
Но в актуальной документации linkExtractor уже без smgllib http://doc.scrapy.org/en/1.1/topics/lin ... ctors.html , я так понимаю они перешли от встроенного экстрактора, который был во второй версии, к lxml, который можно ставить на любую версию питона.

Ответить

Вернуться в «Материалы сайта»

Кто сейчас на конференции

Сейчас этот форум просматривают: Ahrefs [Bot] и 0 гостей