gpt4 book ai didi

python - 如何使用 python 和 beautifulsoup4 循环抓取网站中多个页面的数据

转载 作者:太空狗 更新时间:2023-10-30 00:31:47 25 4
gpt4 key购买 nike

我正在尝试从 PGA.com 网站抓取数据以获取美国所有高尔夫球场的表格。在我的 CSV 表中,我想包括高尔夫球场的名称、地址、所有权、网站、电话号码。有了这些数据,我想对其进行地理编码并将其放入 map 中,并在我的计算机上有一个本地副本

我使用 Python 和 Beautiful Soup4 来提取我的数据。我已经达到提取数据并将其导入 CSV 的目的,但我现在遇到了从 PGA 网站上的多个页面抓取数据的问题。我想提取所有高尔夫球场,但我的脚本仅限于一个页面,我想将其循环播放,以便从 PGA 网站的所有页面中捕获高尔夫球场的所有数据。金课约18000,抓取数据900页

下面附上我的脚本。我需要有关创建代码的帮助,这些代码将从 PGA 网站捕获所有数据,而不仅仅是一个站点,而是多个站点。这样它就会给我提供美国黄金类(class)的所有数据。

下面是我的脚本:

import csv
import requests
from bs4 import BeautifulSoup
url = "http://www.pga.com/golf-courses/search?searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0"

r = requests.get(url)

soup = BeautifulSoup(r.content)

g_data1=soup.find_all("div",{"class":"views-field-nothing-1"})
g_data2=soup.find_all("div",{"class":"views-field-nothing"})

courses_list=[]

for item in g_data2:
try:
name=item.contents[1].find_all("div",{"class":"views-field-title"})[0].text
except:
name=''
try:
address1=item.contents[1].find_all("div",{"class":"views-field-address"})[0].text
except:
address1=''
try:
address2=item.contents[1].find_all("div",{"class":"views-field-city-state-zip"})[0].text
except:
address2=''
try:
website=item.contents[1].find_all("div",{"class":"views-field-website"})[0].text
except:
website=''
try:
Phonenumber=item.contents[1].find_all("div",{"class":"views-field-work-phone"})[0].text
except:
Phonenumber=''

course=[name,address1,address2,website,Phonenumber]
courses_list.append(course)

with open ('filename5.csv','wb') as file:
writer=csv.writer(file)
for row in courses_list:
writer.writerow(row)

#for item in g_data1:
#try:
#print item.contents[1].find_all("div",{"class":"views-field-counter"})[0].text
#except:
#pass
#try:
#print item.contents[1].find_all("div",{"class":"views-field-course-type"})[0].text
#except:
#pass

#for item in g_data2:
#try:
#print item.contents[1].find_all("div",{"class":"views-field-title"})[0].text
#except:
#pass
#try:
#print item.contents[1].find_all("div",{"class":"views-field-address"})[0].text
#except:
#pass
#try:
#print item.contents[1].find_all("div",{"class":"views-field-city-state-zip"})[0].text
#except:
#pass

这个脚本一次只能捕获 20 个,我想在一个脚本中捕获所有内容,该脚本占 18000 个高尔夫球场和 900 页以抓取形式。

最佳答案

PGA 网站的搜索有多个页面,url 遵循以下模式:

http://www.pga.com/golf-courses/search?page=1 # Additional info after page parameter here

这意味着您可以读取页面的内容,然后将 page 的值更改为 1,然后读取下一页......等等。

import csv
import requests
from bs4 import BeautifulSoup
for i in range(907): # Number of pages plus one
url = "http://www.pga.com/golf-courses/search?page={}&searchbox=Course+Name&searchbox_zip=ZIP&distance=50&price_range=0&course_type=both&has_events=0".format(i)
r = requests.get(url)
soup = BeautifulSoup(r.content)

# Your code for each individual page here

关于python - 如何使用 python 和 beautifulsoup4 循环抓取网站中多个页面的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31062435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com