今天的任务是爬一下中国水果交易网的信息。由于老师的课程是2021年年初的,它使用的是北京新发地菜市场的菜价,但是现在已经改版了,具体的网页形式我不认识,它的菜价信息是循环滚动的。所以为了跟上老师的知识步伐,我们改用了中国水果交易网的水果价格。
今天所需要学的是BS4,从BS4内导入beautifulsoup进行爬取。接下来是代码:
#beautifulsoup4解析
#HTML超文本标记语言
import requests
from bs4 import BeautifulSoup
import csv
f=open("fruit_price.csv",mode="w")
csvwriter=csv.writer(f)
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}
csv格式的写入形式还是不熟悉,后面加强练习。后面我自己带了一点小小的创新,因为水果信息肯定是一页放不下的,所以我使用for循环获取每一页的信息,然后不断写进csv文件中。
for c in range(0,2487):
url="https://www.guo68.com/market?page="+"c"
resp=requests.get(url,headers=headers)
resp.close()
#print(resp.text)
后面的代码大体都有注释,可以直接看注释就行了!
#beautifulsoup4解析
#HTML超文本标记语言
import requests
from bs4 import BeautifulSoup
import csv
f=open("fruit_price.csv",mode="w")
csvwriter=csv.writer(f)
headers={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
}
for c in range(0,2487):
url="https://www.guo68.com/market?page="+"c"
resp=requests.get(url,headers=headers)
resp.close()
#print(resp.text)
#解析数据
#把页面源代码交给beautifulsoap处理,生成bs对象
page=BeautifulSoup(resp.text,"html.parser")#指定html解析器,否则处理缓慢且报警告
#从bs对象中查找数据find(标签,属性),find_all(标签,属性)
#print(page)
table = page.find("div",class_="market-table clearFlo")#从page中定位到我们想要的表格
#print(table)
tr=table.find_all("ul")[1:]#在table 里面找到所有的ul,并且我们需要跳过第一行的标签行,所以从[1:]开始
#print(tr)
for ul in tr:
li=ul.find_all("li")
name=li[0].text
place=li[1].text
price=li[2].text
date=li[3].text
#tendmap=li[4].text.text
#print(name,place,price,date)
csvwriter.writerow([name,place,price,date])
f.close()
print("over!")
最后整体的代码贴出来了。
#解析数据
#把页面源代码交给beautifulsoap处理,生成bs对象
page=BeautifulSoup(resp.text,"html.parser")#指定html解析器,否则处理缓慢且报警告
#从bs对象中查找数据find(标签,属性),find_all(标签,属性)
#print(page)
table = page.find("div",class_="market-table clearFlo")#从page中定位到我们想要的表格
#print(table)
tr=table.find_all("ul")[1:]#在table 里面找到所有的ul,并且我们需要跳过第一行的标签行,所以从[1:]开始
#print(tr)
for ul in tr:
li=ul.find_all("li")
name=li[0].text
place=li[1].text
price=li[2].text
date=li[3].text
#tendmap=li[4].text.text
#print(name,place,price,date)
csvwriter.writerow([name,place,price,date])
f.close()
print("over!")