Python 网站抓取后只写一行

Python 网站抓取后只写一行,python,csv,web-scraping,beautifulsoup,Python,Csv,Web Scraping,Beautifulsoup,我正试图提取一份名单,所有的高尔夫球场在美国通过。我需要提取高尔夫球场的名称、地址和电话号码。我的脚本应该从网站中提取所有数据,但看起来它只打印csv文件中的一行。我注意到当我打印“name”字段时,它只打印一次,尽管有find\u all功能。我所需要的只是数据,而不仅仅是网站上多个链接的一个字段 如何修复脚本,使其将所有需要的数据打印到CSV文件中 这是我的剧本: import csv import requests from bs4 import BeautifulSoup cours

我正试图提取一份名单,所有的高尔夫球场在美国通过。我需要提取高尔夫球场的名称、地址和电话号码。我的脚本应该从网站中提取所有数据,但看起来它只打印csv文件中的一行。我注意到当我打印“name”字段时,它只打印一次,尽管有
find\u all
功能。我所需要的只是数据,而不仅仅是网站上多个链接的一个字段

如何修复脚本,使其将所有需要的数据打印到CSV文件中

这是我的剧本:

import csv
import requests 
from bs4 import BeautifulSoup

courses_list = []

for i in range(1):
 url="http://www.thegolfcourses.net/page/1?ls&location=California&orderby=title&radius=6750#038;location=California&orderby=title&radius=6750" #.format(i)
 r = requests.get(url)
 soup = BeautifulSoup(r.content)


g_data2=soup.find_all("div",{"class":"list"})

for item in g_data2:
  try:
    name= item.contents[7].find_all("a",{"class":"entry-title"})[0].text
    print name
  except:
        name=''
  try:
    phone= item.contents[7].find_all("p",{"class":"listing-phone"})[0].text
  except:
      phone=''
  try:
    address= item.contents[7].find_all("p",{"class":"listing-address"})[0].text
  except:
      address=''

  course=[name,phone,address]
  courses_list.append(course)


with open ('PGN_Final.csv','a') as file:
  writer=csv.writer(file)
  for row in courses_list:
          writer.writerow([s.encode("utf-8") for s in row])

下面是代码的简洁实现。您可以使用库
urllib2
而不是
请求
。而bs4的工作原理也一样

import csv
import urllib2
from BeautifulSoup import *

url="http://www.thegolfcourses.net/page/1?ls&location=California&orderby=title&radius=6750#038;location=California&orderby=title&radius=6750" #.format(i)
r = urllib2.urlopen(url).read()
soup = BeautifulSoup(r)

courses_list = []
courses_list.append(("Course name","Phone Number","Address"))

names = soup.findAll('h2', attrs={'class':'entry-title'})
phones = soup.findAll('p', attrs={'class':'listing-phone'})
address = soup.findAll('p', attrs={'class':'listing-address'})
for na, ph, add in zip(names,phones, address):
    courses_list.append((na.text,ph.text,add.text))


with open ('PGN_Final.csv','a') as file:
    writer=csv.writer(file)
    for row in courses_list:
        writer.writerow([s.encode("utf-8") for s in row])

你的缩进到处都是,发布的代码甚至不会执行。如前所述,
courses\u list.append()
调用完全在g\u data2循环中的
for项之外,因此只执行一次,但是,由于缩进的其余部分也是一团乱,我无法确定这是否是您的问题。我很抱歉地修复了它。该页面上只有一个这样的
div
。那么您对我如何获取所有数据有何建议?为什么不在交互式Python会话中尝试一下呢<代码>汤。查找所有('article')
不是很难吗?