Веб-скребок с Python

Я хотел бы ежедневно получать время восхода / захода солнца с веб-сайта. Возможно ли очистить веб-контент с помощью Python? какие модули используются? Есть ли учебное пособие?

11 Solutions collect form web for “Веб-скребок с Python”

Используйте urllib2 в сочетании с блестящей библиотекой BeautifulSoup :

import urllib2 from BeautifulSoup import BeautifulSoup # or if you're using BeautifulSoup4: # from bs4 import BeautifulSoup soup = BeautifulSoup(urllib2.urlopen('http://example.com').read()) for row in soup('table', {'class': 'spad'})[0].tbody('tr'): tds = row('td') print tds[0].string, tds[1].string # will print date and sunrise 

Я бы действительно рекомендовал Scrapy по причинам, которые были разработаны в этом вопросе: «Стоит ли изучать Scrapy?» ,

Цитата из ответа:

  • Сканирование сканирования выполняется быстрее, чем механизировать, потому что использует асинхронные операции (поверх Twisted).
  • Scrapy имеет лучшую и быструю поддержку для синтаксического анализа (x) html поверх libxml2.
  • Scrapy – это зрелая структура с полным юникодом, обрабатывает перенаправления, gzipped-ответы, нечетные кодировки, интегрированный кеш-кеш и т. Д.
  • Как только вы попадаете в Scrapy, вы можете написать паук менее чем за 5 минут, чтобы загружать изображения, создавать эскизы и экспортировать извлеченные данные непосредственно в csv или json.

Я собрал вместе скрипты из моей работы по очистке веб-страниц в этой библиотеке .

Пример сценария для вашего случая:

 from webscraping import download, xpath D = download.Download() html = D.get('http://example.com') for row in xpath.search(html, '//table[@class="spad"]/tbody/tr'): cols = xpath.search(row, '/td') print 'Sunrise: %s, Sunset: %s' % (cols[1], cols[2]) 

Вывод:

 Sunrise: 08:39, Sunset: 16:08 Sunrise: 08:39, Sunset: 16:09 Sunrise: 08:39, Sunset: 16:10 Sunrise: 08:40, Sunset: 16:10 Sunrise: 08:40, Sunset: 16:11 Sunrise: 08:40, Sunset: 16:12 Sunrise: 08:40, Sunset: 16:13 

Я бы настоятельно рекомендовал проверить пик . Он использует jquery-подобный (aka css-like) синтаксис, который делает вещи очень легкими для тех, кто приходит с этого фона.

Для вашего случая это будет примерно так:

 from pyquery import * html = PyQuery(url='http://www.example.com/') trs = html('table.spad tbody tr') for tr in trs: tds = tr.getchildren() print tds[1].text, tds[2].text 

Вывод:

 5:16 AM 9:28 PM 5:15 AM 9:30 PM 5:13 AM 9:31 PM 5:12 AM 9:33 PM 5:11 AM 9:34 PM 5:10 AM 9:35 PM 5:09 AM 9:37 PM 

Вы можете использовать urllib2 для создания HTTP-запросов, а затем у вас будет веб-контент.

Вы можете сделать это так:

 import urllib2 response = urllib2.urlopen('http://example.com') html = response.read() 

Beautiful Soup – это парсер HTML на основе python, который, как предполагается, хорош для скрипирования экрана.

В частности, вот их руководство по анализу HTML-документа.

Удачи!

Я использую комбинацию Scrapemark (поиск urls-py2) и httlib2 (загрузка изображений – py2 + 3). Scrapemark.py имеет 500 строк кода, но использует регулярные выражения, поэтому может быть не так быстро, не проверять.

Пример соскабливания вашего сайта:

 import sys from pprint import pprint from scrapemark import scrape pprint(scrape(""" <table class="spad"> <tbody> {* <tr> <td>{{[].day}}</td> <td>{{[].sunrise}}</td> <td>{{[].sunset}}</td> {# ... #} </tr> *} </tbody> </table> """, url=sys.argv[1] )) 

Применение:

 python2 sunscraper.py http://www.example.com/ 

Результат:

 [{'day': u'1. Dez 2012', 'sunrise': u'08:18', 'sunset': u'16:10'}, {'day': u'2. Dez 2012', 'sunrise': u'08:19', 'sunset': u'16:10'}, {'day': u'3. Dez 2012', 'sunrise': u'08:21', 'sunset': u'16:09'}, {'day': u'4. Dez 2012', 'sunrise': u'08:22', 'sunset': u'16:09'}, {'day': u'5. Dez 2012', 'sunrise': u'08:23', 'sunset': u'16:08'}, {'day': u'6. Dez 2012', 'sunrise': u'08:25', 'sunset': u'16:08'}, {'day': u'7. Dez 2012', 'sunrise': u'08:26', 'sunset': u'16:07'}] 

Я только что увидел RoboBrowser в еженедельнике Pycoder .

Библиотека для веб-скрепок, построенная на запросах и BeautifulSoup. Как Mechanize, но с тестами, документами и интерфейсом Pythonic.

Scrapy с открытым исходным кодом поможет веб-лому в python. Этот открытый исходный код и совместная структура для извлечения данных, которые вам нужны с веб-сайтов.

Веб-скребок тесно связан с индексированием веб-страниц, который индексирует информацию в Интернете с помощью робота-робота или веб-искателя и является универсальной техникой, принятой большинством поисковых систем.

Подробнее о веб-скребке

Сделайте свою жизнь проще с помощью CSS Selectors

Я знаю, что я опаздываю на вечеринку, но у меня есть хорошее предложение для вас.

Использование BeautifulSoup уже было предложено, я предпочел бы использовать CSS Selectors для очистки данных внутри HTML

 import urllib2 from bs4 import BeautifulSoup main_url = "http://www.example.com" main_page_html = tryAgain(main_url) main_page_soup = BeautifulSoup(main_page_html) # Scrape all TDs from TRs inside Table for tr in main_page_soup.select("table.class_of_table"): for td in tr.select("td#id"): print(td.text) # For acnhors inside TD print(td.select("a")[0].text) # Value of Href attribute print(td.select("a")[0]["href"]) # This is method that scrape URL and if it doesnt get scraped, waits for 20 seconds and then tries again. (I use it because my internet connection sometimes get disconnects) def tryAgain(passed_url): try: page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text return page except Exception: while 1: print("Trying again the URL:") print(passed_url) try: page = requests.get(passed_url,headers = random.choice(header), timeout = timeout_time).text print("-------------------------------------") print("---- URL was successfully scraped ---") print("-------------------------------------") return page except Exception: time.sleep(20) continue 

Вот простой веб-искатель, я использовал BeautifulSoup, и мы будем искать все ссылки (якоря), имена классов которых являются _3NFO0d. Я использовал Flipkar.com, это интернет-магазин розничной торговли.

 import requests from bs4 import BeautifulSoup def crawl_flipkart(): url = 'https://www.flipkart.com/' source_code = requests.get(url) plain_text = source_code.text soup = BeautifulSoup(plain_text, "lxml") for link in soup.findAll('a', {'class': '_3NFO0d'}): href = link.get('href') print(href) crawl_flipkart() 

Если мы думаем получить название предметов из какой-либо конкретной категории, тогда мы можем это сделать, указав имя класса этой категории с помощью селектора css:

 import requests ; from bs4 import BeautifulSoup soup = BeautifulSoup(requests.get('https://www.flipkart.com/').text, "lxml") for link in soup.select('div._2kSfQ4'): print(link.text) 

Это частичные результаты поиска:

 Puma, USPA, Adidas & moreUp to 70% OffMen's Shoes Shirts, T-Shirts...Under ₹599For Men Nike, UCB, Adidas & moreUnder ₹999Men's Sandals, Slippers Philips & moreStarting ₹99LED Bulbs & Emergency Lights 
  • Интеллектуальный скрипинг экрана с использованием разных прокси-серверов и пользовательских агентов случайным образом?
  • Экранная скребка в Python
  • Подпроцесс Python не выполняется должным образом
  • как очистить эту страницу squawka?
  • scrape html, сгенерированный javascript с помощью python
  • Макрос Python WWW
  •  
    Interesting Posts for Van-Lav

    прочитать файл ascii в массив numpy

    Фильтровать zipcodes по близости в Django со сферическим законом косинусов

    OpenCV – настройка фотографии с углом наклона (наклоном)

    Как получить имя файла без расширения из пути в Python?

    Получение программы сокета UDP в Python для приема сообщений от клиента Syslog?

    Фильтровать каталог при использовании shutil.copytree?

    Python – PYTHONPATH в linux

    Получить температуру процессора в python на окнах

    указать dtype каждого объекта в массиве numpy python

    Как я могу получить (и установить) текущую позицию курсора bash при использовании readline python?

    Как Pandas DataFrames выглядят одинаково, но fail equals ()?

    Python: Элегантный способ проверить, соответствует ли хотя бы одно регулярное выражение в списке строке

    Время доступа массива numpy значительно влияет на последний индекс по сравнению со вторым последним

    Есть ли способ конвертировать отступ в код Python в фигурные скобки?

    Как встроенная функция диапазона принимает один аргумент или три?

    Python - лучший язык программирования в мире.