bs4解析-湖南农场品价格行情

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("完成!!!")
posted @ 2023-02-28 20:17  0x1e61  阅读(11)  评论(0编辑  收藏  举报