第一版:
# 安装
# pip-install bs4
# 1.拿到页面源代码
# 2.使用bs4进行解析. 拿到数据
import re
import requests
import csv
from bs4 import BeautifulSoup
url = "http://www.xinfadi.com.cn/marketanalysis/0/list/1.shtml"
resp = requests.get(url)
# print(resp.text)
f = open("菜价.csv",mode="w",newline="",encoding="utf-8")
csvwriter = csv.writer(f)
# 解析数据
# 1.把页面源代码交给BeautifulSoup进行处理,生成bs对象
page = BeautifulSoup(resp.text,"html.parser") # 指定html解析器
# 2.从bs对象中查找数据
# find(标签,属性=值)
# find_all(标签,属性=值)
# table = page.find("table",class_="hq_table")
table = page.find("table",attrs={"class":"hq_table"}) # 和上一行是一个意思. 此时可以避免class
# print(table)
# 拿到所有的数据行
trs = table.find_all("tr")[1:]
for tr in trs: # 每一行
tds = tr.find_all("td") # 拿到每行中的所有td
name = tds[0].text # .text表示拿到被标签标记的内容
low = tds[1].text # .text表示拿到被标签标记的内容
avg = tds[2].text # .text表示拿到被标签标记的内容
high = tds[3].text # .text表示拿到被标签标记的内容
guige = tds[4].text # .text表示拿到被标签标记的内容
danwei = tds[5].text # .text表示拿到被标签标记的内容
date = tds[6].text # .text表示拿到被标签标记的内容
# print(name,low,avg,high,guige,danwei,date)
csvwriter.writerow([name,low,avg,high,guige,danwei,date])
f.close()
resp.close()
结果:
第二版完善:(获取多页面的信息)
# 安装
# pip-install bs4
# 1.拿到页面源代码
# 2.使用bs4进行解析. 拿到数据
import re
import requests
import csv
from bs4 import BeautifulSoup
url = ["http://www.xinfadi.com.cn/marketanalysis/0/list/{}.shtml".format(i) for i in range(0,5)]
f = open("菜价2.csv",mode="w",newline="",encoding="utf-8")
csvwriter = csv.writer(f)
for urls in url:
resp = requests.get(urls)
page = BeautifulSoup(resp.text, "html.parser") # 指定html解析器
table = page.find("table", attrs={"class": "hq_table"}) # 和上一行是一个意思. 此时可以避免class
trs = table.find_all("tr")[1:]
for tr in trs: # 每一行
tds = tr.find_all("td") # 拿到每行中的所有td
name = tds[0].text # .text表示拿到被标签标记的内容
low = tds[1].text # .text表示拿到被标签标记的内容
avg = tds[2].text # .text表示拿到被标签标记的内容
high = tds[3].text # .text表示拿到被标签标记的内容
guige = tds[4].text # .text表示拿到被标签标记的内容
danwei = tds[5].text # .text表示拿到被标签标记的内容
date = tds[6].text # .text表示拿到被标签标记的内容
# print(name,low,avg,high,guige,danwei,date)
csvwriter.writerow([name, low, avg, high, guige, danwei, date])
# print(resp.text)
f.close()
resp.close()
结果: