2016-11-11 5 views
0

Ich versuche, Breite und Länge von TripAdvisor Restaurants zu ziehen. Die Informationen sind nicht prominent auf der Webseite angezeigt, aber ich habe es in der HTML finden Sie hier:Scraping Javascript Text mit Python und Selen

Latitude and Longitude w/in Javascript

Ich versuche, diesen Code zu verwenden, um alle Informationen zu ziehen:

#import libraries 
import requests 
from bs4 import BeautifulSoup 
from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 

for i in range(0, 30, 30): 
    #need this here for when you want more than 30 
    while i <= range: 
     i = str(i) 
     #url format offsets the restaurants in increments of 30 after the oa 
     url1 = 'https://www.tripadvisor.com/Restaurants-g294217-oa' + i + '-Hong_Kong.html#EATERY_LIST_CONTENTS' 
     r1 = requests.get(url1) 
     data1 = r1.text 
     soup1 = BeautifulSoup(data1, "html.parser") 
     for link in soup1.findAll('a', {'property_title'}): 
      #print 'https://www.tripadvisor.com/Restaurant_Review-g294217-' + link.get('href') 
      restaurant_url = 'https://www.tripadvisor.com/Restaurant_Review-g294217-' + link.get('href') 
      browser = webdriver.Chrome('C:\Python27\Chromedriver\chromedriver.exe') 
      # use xpath to get to the information in the JS 
      print browser.find_element_by_xpath("""/html/body/script[22]""") 

Wenn ich den Code ausführe, sagt er mir, dass er das Element nicht finden kann. Vielleicht bin ich im Moment ein bisschen hirntot, aber wenn ein frischer Blick darauf schauen könnte und mich wissen lassen würde, ob ich das falsch mache oder ob es einen anderen Weg gibt, bin ich ganz Ohr.

+0

Nicht sicher von Ihrem Problem, aber 'während i <= Bereich:' ist nicht gültig, da 'Bereich' eine Funktion ist. – Brian

+0

Vielen Dank, ich werde mich darum kümmern. Wenn Sie den Link des Bildes betrachten, das ich gepostet habe. Ich versuche, diese Information in diesem Foto zu ziehen. Aber wenn ich es ausführe, sagt es mir, dass der Code das Element im XPath nicht finden kann. – dtrinh

Antwort

0

Es gibt keinen Punkt, der mit requests und BeautifulSoup Pakete, wenn Sie selenium webdriver als Selen verwenden (requests) eine Webseite öffnen und den Inhalt (BeautifulSoup) auf eigene holen. Unten ist die grobe Struktur dessen, was Sie versuchen, klar mit Selen zu erreichen.

from selenium import webdriver 
from selenium.common.exceptions import NoSuchElementException 
from selenium.webdriver.common.keys import Keys 


browser = webdriver.Chrome('C:\Python27\Chromedriver\chromedriver.exe') 
for counter in range(0, 30, 30): 
    #need this here for when you want more than 30 
    while i <= counter: 
     i = str(i) 
     url1 = 'https://www.tripadvisor.com/Restaurants-g294217-oa' + i + '-Hong_Kong.html#EATERY_LIST_CONTENTS' 
     browser.get(url1) # this will redirect to webpage 
     # use xpath to get to the information in the JS 
     print browser.find_element_by_xpath("""/html/body/script[22]""")