python爬虫入手篇
python网络爬虫小白篇
这个是我学习了python一些之后写的一个简单爬虫,爬的是天气网站的数据。代码很low,不过值得一看,都用的比较简单的方法进行网页爬取。
主要思想:
1.用rquests库做网络爬取,或用beautifusoup4做数据解析、分析。用allUniv列表存储最终的数据。
2.首先进入到待爬取的网页,然后选择‘查看元素’,查看网页源代码,找到我们需要爬取网页数据的部分。
1)首先我们需要一个主城市,
通过分析知道:这里需要找到class_='crumbs'的div,然后在这个div中找第二个‘a’标签,然后获取这个标签的值。
2)然后去找‘周边地区’的网页数据,
找到class_='aro_city' 的div标签。
3)然后在这个标签中找到所有‘li’元素,然后逐个遍历这些’li’元素进行获取数据。
4)‘li’标签中找’span’标签,表示周边地区城市名字,’i’标签表示该地区温度情况。
5)最终搜集好数据后,进行数据整理工作。显示数据
下面是代码:欢迎提问与错误指出,这个程序有个缺陷,就是不能处理直辖市的天气情况,这个稍作修改就可以改好。
#encoding=utf-8
import requests
from bs4 import BeautifulSoup
from lxml import etree
import lxml
allUniv=[]#储存全部数据
zhixiaCitys=['北京','上海','广州','天津','香港','澳门','台湾']
def getHtmlText(url): #网络函数
try:
r=requests.get(url,timeout=30)
r.raise_for_status()
r.encoding='utf-8'
return r.text
except:
return "cuowu "
def fillUnivList(soup1): #数据获取函数
mainCityP=soup1.find('div',class_='crumbs')
count=0
mainRecord='' #储存主城区的名字
for each in mainCityP:
count+=1;
mainCity=each.find_next('a')
if count==2: #查找第二个标签的值
mainRecord=mainCity.string
break
data1 = soup1.find('div',class_='aro_city')#找到周边地区数据
data2 = data1.find_all('li')#储存所有周边地区数据
for each in data2: #遍历每一个周边地区的数据
singleUniv=[]
singleUniv.append(mainRecord)
itd1=each.find('span')
singleUniv.append(itd1.string) #存储周边地区城市名字
itd2=each.find('i')
singleUniv.append(itd2.string)#存储周边地区城市温度
allUniv.append(singleUniv)
def dataDo(): #数据处理函数
a=len(allUniv)
for each in range(0,a):
maxTemp=''
minTemp=''
flag=0
for j in allUniv[each][2]:
if j!='/' and flag==0:
maxTemp+=j
elif flag==0:
maxTemp+='°C'
flag=1
else:
minTemp+=j
allUniv[each][2]=minTemp
allUniv[each].append(maxTemp)
def printUnivList(): #数据展示函数
print("{:^4}{:^10}{:^5}{:^8}".format("城市名称","周边地区","最低温度","最高温度"))
for i in range(0,len(allUniv)):
u=allUniv[i]
print("{:^4}{:^16}{:^0}{:^18}".format(u[0],u[1],u[2],u[3]))
def main(): #主函数
url='http://www.weather.com.cn/weather1d/101200101.shtml#input'
html = getHtmlText(url)
soup1=BeautifulSoup(html,"html.parser")
fillUnivList(soup1)
dataDo()
printUnivList()
main()
数据结果展示: