Поиск по блогу

четверг, 21 мая 2015 г.

Selenium или PhantomJS для скрапинга LinkedIn. Пример Python кода

Здесь фрагменты и ссылки по трем важным темам: "Что такое Selenium"(статья на Хабре), "Пример Python кода работы с Selenium" (30 минут видео и код), "Scraper для LinkedIn"(код из видео с from selenium import webdriver).
Кроме того, здесь ссылки на 4 статьи Selenium для Python

Hacking With Python #11 - What is Web Scraping? Опубликовано: 11 нояб. 2014 г.

Slides & files - https://www.mediafire.com/folder/867f... My Twitter: https://twitter.com/DrapsTV

If you like what you see be sure to subscribe and thumbs up!
Постановка задачи
Что такое Selenium?
проект GhostDriver представляет собой независимую реализацию интерфейса WebDriver как раз для PhantomJS.
Selenium для Python. Глава 4. Поиск элементов
Selenium для Python. Глава 3. Навигация
Selenium для Python. Глава 2. Первые Шаги
Selenium для Python. Глава 1. Установка

Selenium и BrowserMobProxy: вместе веселее!


doc Selenium + WebDriver В последнее время Selenium приобрел фантастическую популярность, но далеко не все его пользователи владеют английским языком. Назрела необходимость перевода официальной документации на русский язык.
Is there a way to use PhantomJS in Python?
ghost.py is a webkit web client written in python
Scraping website using Python, Selenium, Lxml and PhantomJS - Now we’re going to modify the source code of the previous example by changing the instantiation of the browser. Firefox() by PhantomJS()

Из комментариев к статье на Хабре "Что такое Selenium?"

В рамках проекта Selenium помимо драйверов для реальных браузеров разрабатывается также драйвер для HtmlUnit, который, конечно, работает без всяких окошек.

Кроме того, есть проект GhostDriver, который представляет собой независимую реализацию интерфейса WebDriver как раз для PhantomJS. Есть вероятность того, что в какой-то момент он войдёт в состав проекта Selenium. На данный момент GhostDriver проходит успешно чуть более 90% официальных тестов для WebDriver (последняя цифра, которую я видел, была 91.64%).

Чем это лучше? Почему нельзя просто использовать PhantomJS? Можно, конечно. Вся фишка Selenium — в едином интерфейсе. Хотите — запускаете тесты в реальном браузере, хотите — запускаете те же самые тесты в PhantomJS через GhostDriver.

In [2]:
from IPython.display import Image
Image('http://software-testing.ru/images/stories/library/barancev/what_is_selenium/selenium_webdriver_parts.png')
Out[2]:

Вот код, который объясняется в видео -пример работы с Selenium

Постановка задачи - слайды с пояснениями. Надо бы решить, что проще, Фантом, или вот такой код на питоне... Надор бы поискать Python библиотеку для Phantomjs, а потом уже думать...
Is there a way to use PhantomJS in Python?
ghost.py is a webkit web client written in python

In [ ]:
//LinkedBot.py
import argparse, os, time
import urlparse, random
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

def getPeopleLinks(page):
 links = []
 for link in page.find_all('a'):
  url = link.get('href')
  if url:
   if 'profile/view?id=' in url:
    links.append(url)
 return links

def getJobLinks(page):
 links = []
 for link in page.find_all('a'):
  url = link.get('href')
  if url:  
   if '/jobs' in url:
    links.append(url)
 return links

def getID(url):
 pUrl = urlparse.urlparse(url)
 return urlparse.parse_qs(pUrl.query)['id'][0]


def ViewBot(browser):
 visited = {}
 pList = []
 count = 0
 while True:
  #sleep to make sure everything loads, add random to make us look human.
  time.sleep(random.uniform(3.5,6.9))
  page = BeautifulSoup(browser.page_source)
  people = getPeopleLinks(page)
  if people:
   for person in people:
    ID = getID(person)
    if ID not in visited:
     pList.append(person)
     visited[ID] = 1
  if pList: #if there is people to look at look at them
   person = pList.pop()
   browser.get(person)
   count += 1
  else: #otherwise find people via the job pages
   jobs = getJobLinks(page)
   if jobs:
    job = random.choice(jobs)
    root = 'http://www.linkedin.com'
    roots = 'https://www.linkedin.com'
    if root not in job or roots not in job:
     job = 'https://www.linkedin.com'+job
    browser.get(job)
   else:
    print "I'm Lost Exiting"
    break

  #Output (Make option for this)   
  print "[+] "+browser.title+" Visited! \n("\
   +str(count)+"/"+str(len(pList))+") Visited/Queue)"
     

def Main():
 parser = argparse.ArgumentParser()
 parser.add_argument("email", help="linkedin email")
 parser.add_argument("password", help="linkedin password")
 args = parser.parse_args()

 browser = webdriver.Firefox()

 browser.get("https://linkedin.com/uas/login")


 emailElement = browser.find_element_by_id("session_key-login")
 emailElement.send_keys(args.email)
 passElement = browser.find_element_by_id("session_password-login")
 passElement.send_keys(args.password)
 passElement.submit()

 os.system('clear')
 print "[+] Success! Logged In, Bot Starting!"
 ViewBot(browser)
 browser.close()

if __name__ == '__main__':
 Main()

Ответ на вопрос, как использовать Selenium

Пора сформулировать, чего я, собственно, хочу? До этого момента я хотел выбрать не первый попавшийся фреймворк или библиотеку, а ту, которую нажо изучить в первую очередь. Что я недавно узнал? Есть можный проект Selenium, он для тестировщиков..., он имитирует действия юзеров в веббраузере. Его можно использовать для парсинга информации... Ное сть проблемы с сохранением данных (комментарии к статье на Хабре). Проект (вроде бы) развивает GhostDriver (вместо WebDriver) ... его то и использует PhantonJS

Идеальный вариант парсера - это переключение между видимым и невидимым браузером, с возможностью импорта, например, кук в общее пространство имен...

Scraping website using Python, Selenium, Lxml and PhantomJS - Now we’re going to modify the source code of the previous example by changing the instantiation of the browser. Firefox() by PhantomJS()



Посты чуть ниже также могут вас заинтересовать

Комментариев нет:

Отправить комментарий