本文將從以下幾個方面詳細闡述python爬取公交數據的方法:
一、準備工作
1、安裝相關庫
import requests
from bs4 import BeautifulSoup
import csv
2、獲取數據源網站url
url = 'http://bus.suzhou.gov.cn/zk/zwgjcx/zxcx_kc_list.aspx'
二、獲取數據
1、分析網頁代碼,獲取需要爬取數據的標籤
<tr class="odd">
<td>1</td>
<td>13路</td>
<td>相城區公交總公司</td>
<td>旺山區域</td>
<td>綜合商場8:00</td>
<td>綜合商場19:00</td>
<td>25.5</td>
<td>2018-08-15</td>
</tr>
2、編寫函數,將需要的數據提取出來
def get_data(item):
data = []
rows = item.findAll('td')
data.append(rows[1].text.strip())
data.append(rows[2].text.strip())
data.append(rows[3].text.strip())
data.append(rows[4].text.strip())
data.append(rows[5].text.strip())
data.append(rows[6].text.strip())
data.append(rows[7].text.strip())
return data
3、利用requests庫發送GET請求,獲取網頁內容;再用BeautifulSoup庫解析網頁內容,獲取table中的所有tr標籤,遍歷每個tr標籤,調用get_data函數獲取數據,並將獲取到的數據保存至csv文件
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')
table = soup.find('table', {'class': 'table_list kcjl_table'})
rows = table.findAll('tr')
with open('data.csv', mode='w', encoding='utf-8', newline='') as file_csv:
writer = csv.writer(file_csv)
writer.writerow(['線路', '所屬公司', '區域', '發車時間', '末班車時間', '票價', '更新時間'])
for item in rows:
if item.find('td') is None:
continue
writer.writerow(get_data(item))
三、結果展示
分析當前目錄下是否生成了data.csv文件,打開該文件查看是否成功導出數據
四、注意事項
1、在requests庫中,可能需要設置headers參數,以模擬正常瀏覽器訪問行為;
2、在使用BeautifulSoup庫解析網頁內容時,需要注意標籤名稱、屬性類型等信息;
3、在保存數據至csv文件時,需要注意文件編碼、文件類型等信息
原創文章,作者:LSRZG,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/375427.html