Python源代码输入
import requests
from bs4 import BeautifulSoup
import csv
# UA伪装
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
# open打开文件并返回一个文件对象
f = open("菜价.csv", mode="a")
# 共15084页 善良一点 只爬三页
for temp in range(1,4):
url = "http://www.xinfadi.com.cn/marketanalysis/0/list/{0}.shtml".format(str(temp))
resp = requests.get(url)
# 查看网页源代码发现charset = utf-8
resp.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", attrs={"class": "hq_table"}) # 字典
# 拿到所有数据
# table中第一个元素为标签,不含数据,所以从下标1开始取数据
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表示拿到被标签标记的内容
avg = tds[2].text # .text表示拿到被标签标记的内容
high = tds[3].text # .text表示拿到被标签标记的内容
size = tds[4].text # .text表示拿到被标签标记的内容
unit = tds[5].text # .text表示拿到被标签标记的内容
date = tds[6].text # .text表示拿到被标签标记的内容
csvwriter.writerow([name, low, avg, high, size, unit, date]) # writerow 按行写入
print("第" + str(temp) + "页" + "over")
f.close()
CSV File Reading and Writing
该csv
模块实现用于以CSV格式读取和写入表格数据的类。它使程序员可以说“以Excel首选的格式写入此数据”,或“从Excel生成的此文件中读取数据”,而无需知道Excel使用的CSV格式的确切细节。程序员还可以描述其他应用程序可以理解的CSV格式,或者定义自己的专用CSV格式。
该csv
模块reader
和writer
对象读取和写入序列。程序员还可以使用DictReader
和DictWriter
类以字典形式读取和写入数据。
Python open()函数
open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
函数定义的参数挺多,这里我们着重讲解mode——文件打开模式。
mode参数有两大类,分别用来指定打开文件的文件格式和读写模式。
文件格式
t:以文本格式打开文件(默认)。一般用于文本文件,如:txt。
b:以二进制格式打开文件。一般用于非文本文件,如:图片。
这一类参数可以与其它的模式参数组合使用,用于指定打开文件的格式。
读写模式
r:以只读方式打开文件(默认模式)。文件指针定位在文件头的位置。如果文件不存在会报错。
w:以只写方式打开文件。如果文件存在,则打开文件,清空文件内容,从文件头开始编辑;如果文件不存在,则创建新文件,打开编辑。
a:以追加方式打开文件,同样是只写,不允许进行读操作。如果文件存在,则打开文件,将文件指针定位到文件尾。因此,新的内容是追加在已有内容之后。如果文件不存在,则创建新文件进行写入。
+:打开一个文件进行更新(可读写)。注意:该模式不能单独使用,需要与r/w/a组合使用。文件指针的位置取决于另一个组合参数。
组合模式
r+:打开一个文件用于读写。如果文件存在,则打开文件,将文件指针定位在文件头,新写入的内容在原有内容的前面;如果文件不存在会报错。
w+:打开一个文件用于读写。如果文件存在,则打开文件,清空原有内容,进入编辑模式;如果文件不存在,则创建一个新文件进行读写操作。
a+:以追加模式打开一个文件用于读写。如果文件存在,则打开文件,将文件指针定位在文件尾,新写入的内容在原有内容的后面;如果文件不存在,则创建一个新文件用于读写。
所有上面这些模式默认都是t——文本模式,如果要以二进制模式打开,需要加上参数b,如:rb、rb+、wb、wb+、ab、ab+。
输出
第1页over
第2页over
第3页over
菜价.csv
大白菜,0.40,0.50,0.60,存储,斤,2021-03-26
大白菜,0.70,0.75,0.80,新,斤,2021-03-26
娃娃菜,0.60,0.75,0.90,大\小,斤,2021-03-26
芹菜,0.80,0.90,1.00,鲁,斤,2021-03-26
菠菜,0.60,0.95,1.30,长杆\冀,斤,2021-03-26
番茄,1.00,1.40,1.80,川鲁蒙,斤,2021-03-26
番茄(精品),1.50,1.75,2.00,普通,斤,2021-03-26
黄瓜,1.60,1.90,2.20,蒙辽袋\鲁,斤,2021-03-26
黄瓜(鲜干花),2.60,2.90,3.20,冀,斤,2021-03-26
小黄瓜,3.80,4.90,6.00,旱\荷兰,斤,2021-03-26
茄子,1.20,1.60,2.00,鲁\冀,斤,2021-03-26
架豆,2.60,3.70,4.80,\冀,斤,2021-03-26
尖椒,1.40,1.95,2.50,冀晋/鲁新,斤,2021-03-26
柿子椒,1.40,1.85,2.30,\鲁新,斤,2021-03-26
土豆,0.60,0.80,1.00,\冀,斤,2021-03-26
新土豆,0.70,0.95,1.20,陕冀云新,斤,2021-03-26
黄葱头,0.80,1.00,1.20,\蒙甘,斤,2021-03-26
红葱头,0.90,1.10,1.30,普通,斤,2021-03-26
葱,3.50,3.75,4.00,冀/苏鲁闽,斤,2021-03-26
吊冬瓜,1.70,1.95,2.20,桂,斤,2021-03-26
地冬瓜,1.40,1.60,1.80,苏、新,斤,2021-03-26
团生菜,2.50,2.75,3.00,滇|冀,斤,2021-03-26
圆白菜(陆地),0.50,0.60,0.70,鄂\苏,斤,2021-03-26
圆白菜(大棚),1.00,1.15,1.30,普通,斤,2021-03-26
油菜,1.50,1.75,2.00,鲁\京,斤,2021-03-26
姜,3.00,4.00,5.00,姜头\新,斤,2021-03-26
大蒜,2.50,2.75,3.00,普通,斤,2021-03-26
新蒜,2.00,2.30,2.60,普通,斤,2021-03-26
西葫芦,1.00,1.20,1.40,滇/鲁,斤,2021-03-26
菜花,1.20,1.60,2.00,普通,斤,2021-03-26
散菜花,2.00,2.65,3.30,豫\苏,斤,2021-03-26
绿菜花,1.60,2.10,2.60,\ 冀,斤,2021-03-26
胡萝卜,0.70,0.95,1.20,冀/鲁,斤,2021-03-26
胡萝卜(洗),1.00,1.15,1.30,冀/蒙箱,斤,2021-03-26
心里美,0.80,1.05,1.30,冀,斤,2021-03-26
白萝卜,0.50,0.60,0.70,\冀,斤,2021-03-26
卞萝卜,0.40,0.50,0.60,冀,斤,2021-03-26
青萝卜,1.80,2.15,2.50,冀\津,斤,2021-03-26
平菇,2.00,2.25,2.50,\小叶,斤,2021-03-26
莴笋,1.20,1.60,2.00,闽浙/鲁,斤,2021-03-26
香菇,2.50,3.75,5.00,普通,斤,2021-03-26
香菜,5.00,5.50,6.00,鲁\冀,斤,2021-03-26
山药,1.80,2.10,2.40,脆\麻新,斤,2021-03-26
铁棍山药,5.00,5.75,6.50,普通,斤,2021-03-26
藕,2.00,3.00,4.00,\津,斤,2021-03-26
小毛冬瓜,2.00,2.50,3.00,长\圆,斤,2021-03-26
韭菜,1.20,1.35,1.50,二茬\粤,斤,2021-03-26
小白菜,1.50,1.65,1.80,普通,斤,2021-03-26
蒜苗,3.00,4.50,6.00,云\鲁存,斤,2021-03-26
蒜黄,2.00,2.90,3.80,2茬\冀,斤,2021-03-26
豆王,3.50,5.15,6.80,普通,斤,2021-03-26
扁豆,2.80,3.90,5.00,冀\鲁聊城,斤,2021-03-26
豇豆,4.00,4.50,5.00,桂滇闽,斤,2021-03-26
白不老,4.00,5.00,6.00,滇|鲁,斤,2021-03-26
油豆,7.00,7.65,8.30,滇,斤,2021-03-26
毛豆,5.00,5.40,5.80,普通,斤,2021-03-26
红薯,1.20,1.40,1.60,\冀新,斤,2021-03-26
红薯,2.00,2.25,2.50,西瓜红,斤,2021-03-26
绿豆芽,0.90,0.95,1.00,普通,斤,2021-03-26
黄豆芽,0.80,0.85,0.90,普通,斤,2021-03-26