這次要爬取的資料是北京新發地網站上的菜價,這是我根據别人的視訊學的,後面對代碼進行了部分改進
北京新發地網址:http://www.xinfadi.com.cn/
進入網址之後點選價格即可檢視菜價,右鍵檢視頁面源代碼,随機查找目前頁面的一種菜品,固定要找資料的大緻位置。
所有資料在td裡面,直接查找td不現實,所有的資料又放在table裡面,直接查找table也不現實,而我們要查找的資料在<table class="hq_table>中
注意事項如下:
1.需要具備初步html知識,table是表格,tr是表格的行,td是表格的列
2.BeautifulSoup處理頁面源代碼時,要根據自己的需要選擇解析語言(本例中是html)
3.
1)find(标簽,屬性=值) 隻找一個
2)find_all(标簽,屬性=值) 查找全部
4.由于class是python中的關鍵字,标簽可以使用字典,也可以使用class_表示
筆記代碼如下:
import requests
import bs4
import csv
from bs4 import BeautifulSoup
# 拿到頁面源代碼
i = 1
while i <= 3:
url = f"http://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml"
resp = requests.get(url)
# print(resp.text)
# 寫入檔案
f = open(f"第{i}頁菜價.csv", mode="w")
csvwriter = csv.writer(f)
# 解析資料
# 1.把頁面源代碼交給BeautifulSoup進行處理,生成bs4對象
page = BeautifulSoup(resp.text, "html.parser")
# 2.從bs對象中查找資料
# table = page.find("table", class_="hq_table")#class_表示
table = page.find("table", attrs={"class": "hq_table"}) # 字典表示
trs = table.find_all("tr")[1:]
for tr in trs:
tds = tr.find_all("td") # 每行中的每一列
name = tds[0].text # .text表示拿到呗标簽标記的内容,菜品名稱
low = tds[1].text # .text表示拿到呗标簽标記的内容,菜品最低價
average = tds[2].text # .text表示拿到呗标簽标記的内容,菜品平均價
high = tds[3].text # .text表示拿到呗标簽标記的内容,菜品最高價
size = tds[4].text # .text表示拿到呗标簽标記的内容,菜品規格
kind = tds[5].text # .text表示拿到呗标簽标記的内容,菜品種類
date = tds[6].text # .text表示拿到呗标簽标記的内容,菜品上市日期
csvwriter.writerow([name, low, average, high, size, kind, date])
# print("over!")
i += 1
f.close()
print("over!")
想知道第幾頁到第幾頁的菜價,隻需要改i的值即可
本文隻是為了防止哪天再次重裝系統的時候資料未備份時所寫,大家看着玩就好。