import requests
from bs4 import BeautifulSoup
import csv
url = 'https://price.21food.cn/market/174-p1.html'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.41'
}
resp = requests.get(url=url, headers=headers)
# print(resp.text)
# 解析数据
# 1.把页面源代码交给BeautifulSoup进行处理,生成bs对象
page = BeautifulSoup(resp.text, 'html.parser') # 设置解析器
# 2.从bs对象中查找数据
# find(标签,属性=值)
# find_all(标签,属性=值)
# 定位到一个方便提取具体数值的地方
# div = page.find('div',class_='sjs_top_cent_erv') # class是python关键字,所以要写成class_
div = page.find('div', attrs={"class": "sjs_top_cent_erv"}) # 和上一行是一个意思,此时可以避免class
# 拿到所有数据行
# 进行切片,不要第一个tr 第一个tr是每一个列标题
trs = div.find_all('tr')[1:]
# 存储文件
f = open('data.csv', mode='w', encoding='utf-8', newline='') # newline = ''
# 备注:如果没有指定 newline=‘’,则嵌入引号中的换行符将无法正确解析,并且在写入时,使用 \r\n 换行的平台会有多余的 \r 写入。
csvwriter = csv.writer(f)
for tr in trs: # 每一行的数据
tds = tr.find_all('td') # 拿到行中的所有td
name = tds[0].text # .text 表示拿到被标签标记的内容
market = tds[1].text
spe = tds[2].text
max = tds[3].text
min = tds[4].text
ave = tds[5].text
date = tds[6].text
csvwriter.writerow([name, market, spe, max, min, ave, date]) # 放到csv文件里
resp.close()
f.close()
print("完成!!!")
标签:入门,bs4,text,tr,class,价格行情,tds,div,find
From: https://www.cnblogs.com/Wesuiliye/p/17165838.html