如何在不变的URL中使用不同的城市浏览多个网页-Python 3
我正在访问不同的网站来练习网页抓取,并尝试对以下网站进行网页抓取- 我以前在网上发布过一个类似的问题,我正在抓取同一个网站。提供的答案非常有效,允许我提取一个城市中所有商店的所有lat和long。然而,我也想从多个城市提取lat和long for商店,遇到了一个问题,我需要一些指导。改变城市也不会改变URL 这个网站都是中文的,所以我不得不用谷歌翻译把它翻译成英文,然后一路工作 我如何选择不同的城市显示在上面以红色突出显示的图像中。我基本上点击了那个链接,选择了我想要显示的城市。我想看看不同城市或北京的商店的经纬度 下面是我目前正在工作的代码。下面的代码只提取上海所有商店的经纬度,显示在默认页面上如何在不变的URL中使用不同的城市浏览多个网页-Python 3,python,html,web-scraping,beautifulsoup,Python,Html,Web Scraping,Beautifulsoup,我正在访问不同的网站来练习网页抓取,并尝试对以下网站进行网页抓取- 我以前在网上发布过一个类似的问题,我正在抓取同一个网站。提供的答案非常有效,允许我提取一个城市中所有商店的所有lat和long。然而,我也想从多个城市提取lat和long for商店,遇到了一个问题,我需要一些指导。改变城市也不会改变URL 这个网站都是中文的,所以我不得不用谷歌翻译把它翻译成英文,然后一路工作 我如何选择不同的城市显示在上面以红色突出显示的图像中。我基本上点击了那个链接,选择了我想要显示的城市。我想看看不同城
import os
import requests
import csv
import time
from bs4 import BeautifulSoup
csv_name = 'Lat_long_practice.csv'
csv = open(csv_name, 'w', encoding='utf-8-sig')
columnTitleRow = "Name, Latitude, Longitude\n"
csv.write(columnTitleRow)
for page_no in range(1, 14):
data = {'pageIndex': page_no, 'pageSize': 10, 'keyword': '输入餐厅地址或餐厅名称'}
page = requests.post('http://www.pizzahut.com.cn/StoreList/Index', data=data)
soup = BeautifulSoup(page.text, 'html.parser')
print('PAGE', page_no)
for row in soup.find_all('div',class_='re_RNew'):
name = row.find('p',class_='re_NameNew').string #Get the name of the store
info = row.find('input').get('value')
location = info.split('|')
#print(location)
row = ''
if location[0] == '':
print(name)
row = name + ',' + '' + ',' + '' + '\n'
csv.write(row)
else:
location_data = location[0].split(',')
latitude = location_data[0]
longitude = location_data[1]
print(name, latitude, longitude)
row = name + ',' + latitude + ',' + longitude + '\n'
csv.write(row)
谢谢你读了一个很长的问题。如果有人能想出我如何使用python和beautifulsoup来提取不同城市的所有坐标,并保持URL不变,那就太棒了。中也有静态URL
您可以使用selenium
和phantomjs
from selenium import webdriver
url1 = "https://www.tripadvisor.com.tr/Restaurants-g293974-Istanbul.html"
executable_path1 = './phantomjs'
driver = webdriver.PhantomJS(executable_path=executable_path1)
driver.get(url1)
#selecting links in the page
#doing another things
nextpage = driver.find_element_by_xpath("//*[@id='EATERY_LIST_CONTENTS']/div[3]/div//a[contains(.,'Sonraki')]")
nextpage.click()
在伊斯坦布尔,共有386个与餐厅相关的页面,所有页面的url都是相同的(也称为不变url,静态url)
这是我刮tripadvisor的代码之一。我希望它能帮助你
有关更多信息,请检查如果我理解正确,这里的实际问题是维护和迭代所有可用城市,一次一个
//a[contains(@class,'selected_city')]
)所有城市都在第二个
//div[contains(@class,'city\u window')]
中,因此我们需要迭代其子divletterIndex
和cityIndex
city\u sel\u box
DIV,所以我们将使事情变得更简单,注意第一个相关的内部DIV
是第30个,ID选择了\u a2
因此,我们可以设置
letterIndex=31
并从cityIndex=1
开始(//div[contains(@class,'city\u window')]/div)[letterIndex]
,其中letterIndex
从31到52上迭代(//div[contains(@class,'city_window')]/div)[letterIndex]/div/a[cityIndex]
,使用cityIndex
从1到数组长度(//div[contains(@class,'city_window')]/div)[31]/div/a
让我知道它是如何工作的,更重要的是,如果您有进一步的问题。当您单击一个城市时,会调用函数addCookie,这是按照
iplocation={city}|0
因此,您可以通过发送适当的cookie获得某个城市,例如:
from urllib.parse import quote_plus
page = requests.post('http://www.pizzahut.com.cn/StoreList/Index', data=data, cookies={'iplocation': quote_plus('北京市|0|0')})
你能更具体地谈谈你的实际问题吗?嘿,谢谢你的评论。基本上,我需要的是通过不同的城市,提取商店的纬度和经度。但是,默认页面仅显示上海的门店。所以,我希望得到不同城市商店的经度和纬度。我也会修改我的问题,让它更清楚。对不起,伙计,这个问题不属于这里。这只是翻译中文的问题。使用该工具后,我发现有一个“切换城市”按钮。我相信这就是你一直在寻找的是的,我知道有一个叫“切换城市”的按钮,我在上面贴了。这也不是翻译中文的问题。我想知道的是我如何利用python和beautifulsoup中的按钮来获取不同城市的lat和long,不仅仅是从默认页面(只显示上海的商店)中获取,所以你的问题不是关于不断变化的城市,而是关于导出坐标?嘿,cookies中的“1”代表什么?这真的是我必须插入的曲奇吗?我一定会这样尝试。谢谢你的帮助!