爬虫学习与总结

博主分享了自己学习Python爬虫的过程,包括爬取西安2019年全年天气数据并实现可视化,B站全站排行榜信息,以及有道翻译的单词释义。通过BeautifulSoup和requests库进行网页数据解析和抓取,利用matplotlib进行数据可视化,最终将结果保存在CSV文件中。
摘要由CSDN通过智能技术生成

我们都知道在现在的数据海洋里,获取大量对自己有用的信息无疑是一笔宝贵的财富,譬如机器学习中我们可以用大量数据生成的数据集来用计算机实现预测,而爬虫,无疑是获取信息的一个绝佳方法。
上个月开始了爬虫的学习,在B站上学习了全套的爬虫课程链接点这
每看懂爬虫的一节后我都会去自己找与视频相同的类型网站去自己实战,通过半个月的学习,自己写了一些小任务玩玩,下面是这段时间所进行的任务

爬取西安天气并实现天气可视化

(以2019年全年天气为例)网址
主要思路:
1.通过bs4库中的BeautifulSoup模块来进行数据解析和筛选并对需要数据进行爬取
2.将所爬取的数据写入csv文件进行整理
3.使用python的matplotlib库的pyplot模块来实现图像可视化
多说无益,直接上代码😂

from bs4 import BeautifulSoup
import pandas as pd
import requests
import csv
import matplotlib.pyplot as plt
file1=open("test1.txt",'w')
list_tq=[]
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
url1="http://lishi.tianqi.com/xian/2019%d.html"
url2="http://lishi.tianqi.com/xian/20190%d.html"
for i in range(1,13):
    if i <10:
        new_url=url2%i
    else:
        new_url=url1%i
    # print(new_url)
    page_text=requests.get(url=new_url,headers=headers).text
    soup=BeautifulSoup(page_text,"lxml")
    tq_list=soup.select("div.tian_three>ul.thrui>li")
    for tq in tq_list:
        data=tq.text
        file1.write(data)
        #爬取加写入txt文件
file1=open("test1.txt",'r')
file2=open("test2.txt",'w')
for line in file1.readlines():
    if line=="\n":
        line=line.strip("\n")
    file2.write(line)
file1.close()
file2.close()
file3=open("test2.txt",'r')
file4=open("test3.csv","w")
amount=0
file4.write("日期,星期,,最高气温,最低气温,天气,风向,风力\n")
while True:
    str1=file3.readline()
    if str1:
        file4.write(str1.strip("\n").replace(' ',',')+',')
        amount+=1
        if not amount%5:
            amount=0
            file4.write("\n")
    else:
        break
file3.close()
file4.close()
df=pd.read_csv("test3.csv",encoding="ANSI")
df=df.dropna(axis=1)
df.to_csv("test4.csv",encoding="ANSI")
file5=open("test4.csv","r")
file6=open("test5.csv","w")
a=file5.readlines()
b=''.join(a[1:])
# file6.write("日期,星期,最高气温,最低气温,天气,风向,风力\n")
file6.write(b)
#写入csv文件

plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
date=[]
maxC=[]
minC=[]
# for i in range(365):
#     date.append(i)
with open("test5.csv","r")as csvfile:
    reader=csv.reader(csvfile)
    for row in reader:
        date.append(row[0])
with open("test5.csv","r")as csvfile:
    reader=csv.reader(csvfile)
    for row in reader:
        maxC.append(int(row[2].strip('℃')))
with open("test5.csv", "r")as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        minC.append(int(row[3].strip('℃')))
plt.plot(date,maxC,"red",label="最高气温")
plt.plot(date,minC,"blue",label="最低气温")
plt.legend(loc=0,ncol=2,facecolor='w',shadow=False)
plt.title("西安2019年历史气温表")
plt.ylabel("气温(单位:℃)")
plt.xlabel("日期")
plt.xticks(date[::59])
plt.savefig("西安天气.png")
plt.show()
#可视化实现

最后上几张过程图
这是刚爬取到的形式
这是第二步完成后以csv形式存储
最后绘制出的全年气温折线图

爬取B站全站排行榜

这个也是非常基础的爬虫,因为是固定的url,甚至比第一个简单多了,下面直接来代码

from bs4 import BeautifulSoup
import requests
biliNamelist=[]
biliWatchlist=[]
mainList=[]
bilivaluelist=[]
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
url="https://www.bilibili.com/v/popular/rank/all"
response=requests.get(url=url,headers=headers)
response.encoding='utf-8'
page_text = response.text
soup=BeautifulSoup(page_text,"lxml")
biliName_list=soup.select("html ul.rank-list>li div.info>a")
biliWatchNum_list=soup.select("html ul.rank-list>li div.info span.data-box")
bilivalue_list=soup.select("html ul.rank-list>li div.info div.pts>div")
for biliName in biliName_list:
    biliNames=biliName.text.replace(",",",")
    biliNamelist.append(biliNames)
for biliWatchNum in biliWatchNum_list:
    biliWatchNums=biliWatchNum.text.strip()
    biliWatchlist.append(biliWatchNums)
for bilivalue in bilivalue_list:
    bilivalues=bilivalue.text
    bilivaluelist.append(bilivalues)
for i in range(100):
    mainList.append(str(i+1))
    mainList.append(str(biliNamelist[i]))
    mainList.append(str(biliWatchlist[3*i+0]))
    mainList.append(str(biliWatchlist[3*i+1]))
    mainList.append(str(biliWatchlist[3*i+2]))
    mainList.append(str(bilivaluelist[i]))
file1=open("test1.csv","w",encoding="utf-8")
file1.write("排名,视频名称,播放量,弹幕数量,up主,视频热度\n")
for i in range(600):
    file1.write(mainList[i])
    file1.write(",")
    if (i+1)%6==0:
        file1.write("\n")
file1.close()

下面是爬取结果的图片(这是发博客时的B站排行榜,不同时间看的可能会不一样)
这里的csv打开是乱码还没解决,还是太菜了

爬取有道翻译

爬取网页
这个程序目的是输入一个单词,将该单词在有道翻译上的释义写入csv文件中
把url的特征找到,爪巴就完事儿了
下面是代码

from bs4 import BeautifulSoup
import requests
file1=open("test1.csv","a")
headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36"
}
url="http://dict.youdao.com/w/eng/%s/#keyfrom=dict2.index"
i=int(input("请输入查询单词数:"))
wordsmean_list=[]
while i:
    words=input("请输入单词:")
    real_url=url%words
    page_text=requests.get(url=real_url,headers=headers).text
    soup1=BeautifulSoup(page_text,"lxml")
    soup1=soup1.find("div",id="phrsListTab")
    word_list=soup1.select("div.trans-container>ul>li")
    file1.write(words+",")
    for wordmean in word_list:
        wordsmean=wordmean.text
        file1.write(wordsmean+",")
    file1.write("\n")
    i-=1
    print("写入成功")

先不上图了,先说说自己的不足吧,主要是我没啥时间再改代码了,不然我就修了,首先我每一个单词都要访问一次该单词对应的url,而如果使用了json(java script object nation)就可以在一个网页内进行切换,可以去掉很多多余的操作,然后这个url显然也是可以翻译中文的,不过对应的soup里的指令和翻译英文有所不同,不过也是很简单的,各位在尝试的时候可以直接把这个程序写成一个函数,通过两个参数(翻译方式和被翻译项)来实现更实用的功能
下面惯例上图
嗯,就这
确实我还想打一个单词的(doge)
就这样了,好久没写博客了,大物课逃课来不急了,就干脆把博客写了😅😅😅
如果这个博客对你的爬虫学习有帮助,就点个赞吧,球球了😢(码字累死我了)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值