如何解决Google Maps的一些XPATH选择器返回的数据不是Selenium Python的
我正在尝试抓取Google地图。 phone和hours变量不返回任何数据。其他变量可以正常工作并返回数据。 XPATH是正确的。我不确定这是什么问题。
这里是LINK
其他选择器(例如名称,地址,标题,网站)可以很好地返回数据,但电话和小时数不返回任何数据。
希望得到一些答案。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from scrapy.selector import Selector
import csv
from tqdm import tqdm
import time
driver = webdriver.Firefox()
linksFile=open("links.txt",'r')
allLinks = linksFile.readlines()
for link in tqdm(allLinks):
try:
driver.get(link)
except Exception:
print('Something went wrong with the URL: ')
# time.sleep(15)
while True:
WebDriverWait(driver,15).until(
EC.presence_of_element_located((By.XPATH,'//div[contains(text(),"Directions")] | //div[contains(text(),"Website")]'))
)
results = driver.find_elements_by_xpath('//div[contains(text(),"Website")]')
for result in results:
# writing to the CSV file
outFile = open("data.csv",'a+',newline="")
writer = csv.writer(outFile)
business = driver.find_element_by_xpath('//div[@role="heading"]/div')
business.click()
# waiting for the page to load
WebDriverWait(driver,15).until(
EC.presence_of_element_located((By.XPATH,'//div[@class="immersive-container"]'))
)
# parcing response to the scrapy selector
response = Selector(text=driver.page_source)
name = response.xpath('//h2[@data-attrid="title"]/span/text()').get()
title = response.xpath('(//span[contains(text(),"Google reviews")])/parent::a/parent::span/parent::span/parent::div/parent::div/parent::div/following-sibling::div/div/span/span/text()').get()
address = response.xpath('//a[contains(text(),"Address")]/parent::span/following-sibling::span/text()').get()
website = response.xpath('(//a[contains(text(),"Website")])/@href').get()
phone = response.xpath('//a[contains(text(),"Phone")]/parent::span/following-sibling::span/a/span/text()').get()
hours = response.xpath('//a[contains(text(),"Hours")]/parent::span/following-sibling::div/label/span//btext()').get()
total_reviews = response.xpath('(//span[contains(text(),"Google reviews")])[1]/text()').get()
total_rating = response.xpath('(//span[contains(text(),"Google reviews")])/parent::a/parent::span/parent::span/parent::div/span/text()').get()
input('Check: ')
outFile = open("data.csv",newline="")
writer = csv.writer(outFile)
vals = [name,title,address,website,phone,hours,total_reviews,total_rating]
writer.writerow(vals)
outFile.close()
解决方法
您可以使用pageSource的Java脚本externalHTML intead吗?
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onPositionUpdated(final PositioningManager.LocationMethod locationMethod,final GeoPosition geoPosition,final boolean mapMatched) {
final GeoCoordinate coordinate = geoPosition.getCoordinate();
map.setCenter(coordinate,Map.Animation.BOW);
map.setOrientation((long) Math.floor(geoPosition.getHeading() + 0.5d),Map.Animation.BOW);
xhours中还有一个问题:
Image navigation_pointer = new Image();
navigation_pointer.setImageResource(R.drawable.navigation_ico_new);
mMapFragment.getPositionIndicator().setMarker(navigation_pointer);
mMapFragment.getPositionIndicator().setSmoothPositionChange(true);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。