GIS-LAB

Географические информационные системы и дистанционное зондирование


Форумы GIS-Lab.info

Геоинформационные системы (ГИС) и Дистанционное зондирование Земли


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

Обсуждение материалов сайта: вопросы, замечания, предложения

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

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

Парсинг сайтов с помощью фреймворка Scrapy
Написал статью, просьба покритиковать.
  • 1

Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Denis Rykov
Author
 
Зарегистрирован: 11 апр 2008
 
Сообщения: 3265
Репутация: 478
Статьи: 33
Проекты: 9

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

Сообщение boss » 14 фев 2016, 02: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

  • 0

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

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

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

  • 1

ericsson
Вредитель полей
 
Зарегистрирован: 27 июл 2009
 
Сообщения: 3095
Репутация: 639

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

Сообщение boss » 23 фев 2016, 21: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 мин.

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

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

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

Сообщение Denis Rykov » 25 фев 2016, 15: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()
  • 0

Spatial is now, more than ever, just another column- The Geometry Column.
Аватара пользователя
Denis Rykov
Author
 
Зарегистрирован: 11 апр 2008
 
Сообщения: 3265
Репутация: 478
Статьи: 33
Проекты: 9

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

Сообщение boss » 02 апр 2016, 14: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 создать дам базы.
Если есть возможность покажите простой пример как это делать а дальше я уже сам буду разбираться. Главное понять и начать.
  • 0

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

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

Сообщение Alice » 16 июн 2016, 11: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'
  • 0

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

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

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

А всё, сама разобралась - у вас немного устаревший код, теперь нужно использовать
Код: Выделить всё
from scrapy.linkextractors import LinkExtractor
  • 0

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

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

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

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

Редактор материалов, модератор форума
Александр Мурый
званий не имею
 
Зарегистрирован: 26 сен 2009
Откуда: Москва (на карте)
 
Сообщения: 4882
Репутация: 668
Статьи: 3
Проекты: 5/1

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

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

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

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


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


(Геокруг)

© GIS-Lab и авторы, 2002-2013. При использовании материалов сайта, ссылка на GIS-Lab и авторов обязательна. Содержание материалов - ответственность авторов (подробнее).