学了一学期Python,自己写的爬虫,请大佬们指正
老师课上只讲简单的语法,自己只能看教程摸索着学习,请大佬帮忙瞧瞧。程序实现就是简单的把租房的房价爬下来再画出图来。
import requests
from bs4 import BeautifulSoup
import re
import matplotlib.pyplot as plt
def getHtmlText(url): #获取页面信息
try:
r=requests.get(url) #get页面
r.raise_for_status() #判断有无异常
r.encoding= r.apparent_encoding #编码
print('获取网页地址:',r.url)
return r.text
except:
return "error"
def f_nameList(html): #获取房子标题
soup= BeautifulSoup(html,"html.parser")
fList=soup.find_all('a',{'class':'js-title value title-font'}) #寻找符合条件的a标签
f_name=[]
print("房子标题数量:",len(fList))
for i in range(len(fList)):
name=fList.string #将标签中字符串保存到列表
# print(name)
f_name.append(name)
for i in range(len(f_name)):
print('{},{}'.format(i,f_name))
# print(len(f_name))
return f_name #返回列表
def f_priceList(html): #获取房子价格
soup = BeautifulSoup(html,"html.parser")
pList=soup.find_all('div',{'class':'price'})
f_price=[]
print("价格爬取数量:",len(pList))
# print(pList)
for i in range(len(pList)):
Price=pList.find_all('span',{'class':'num'})
for j in range(len(Price)):
price=eval(Price.string)
# print(price)
f_price.append(price)
# print(f_price)
# print(len(f_price))
return f_price
def f_sizeList(html): #获取房子平方米
soup= BeautifulSoup(html,"html.parser")
sList=soup.find_all('dd',{'class':'dd-item size'})
f_size=[]
# print(sList)
print("平方米抓取数量:",len(sList))
for i in range(len(sList)):
Size=sList.find_all('span',string=re.compile('㎡')) #正则表达式抓取平方
for j in range(len(Size)):
size=Size.string
s=size.rstrip('㎡')
s=eval(s)
# print(type(s))
f_size.append(s)
# print(f_size)
# print(len(f_size))
return f_size
def printPlt(S): #绘制统计图
f_size=[]
f_price=[]
plt.rcParams['font.family'] = ['SimHei'] #加载字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
for i in range(len(S)):
f_price.append(S)
f_size.append(S)
x=f_size
y=f_price
plt.cla() #清屏
plt.scatter(x, y,marker='o', s=10,linewidths=1) #散点图格式
plt.title('赶集网青岛市租房平方米与房租价格关系图') #标题
plt.xlabel('平方米') #x轴
plt.ylabel('房租价格 元/月') #y轴
plt.pause(0.01) #刷新时间
plt.show() #开始绘制图
def main(): #主函数
pn=3
f_List=[]
name=[]
price=[]
size=[]
start_url='http://qd.ganji.com/zufang/' #赶集网青岛地区网址
for i in range(pn): #翻页
try:
url = start_url+'&pn'+str(i) #翻页地址
html = getHtmlText(url)
except:
continue
n=f_nameList(html) #整理列表格式
p=f_priceList(html)
s=f_sizeList(html)
for j in range(len(n)):
name.append(n)
price.append(p)
size.append(s)
n=len(name)
for i in range(n):
f_List.append(,price,size])
print("总抓取__{:_^20}__条租房信息。。。".format(len(f_List)))
# print(f_List)
sortList=sorted(f_List,key=(lambda x:x)) #给列表排序
# print(sortList)
printPlt(sortList) #给绘图函数传入列表
if __name__ == '__main__':
main()
{:1_893:}{:1_893:}{:1_893:} 你应该...............我配指导你吗{:1_896:} li13557771405 发表于 2020-7-23 14:52
你应该...............我配指导你吗
交流交流,{:1_893:} 17720264720 发表于 2020-7-23 12:44
太秀了,作图简直了,优秀
一开始没想作图,只是感觉爬取数据太单调了,直接拿来做个图比较明显。。。。 看不出来有什么问题,requests爬数据大概都这样吧。一般涉及到翻页数据,我第一个想到的是用scrapy,数据爬到数据库里,再从数据库取数据进行处理。
绘图是真秀,我是从来没想过爬完数据直接绘图的,都是保存好数据后再处理。 thepoy 发表于 2020-7-24 00:00
看不出来有什么问题,requests爬数据大概都这样吧。一般涉及到翻页数据,我第一个想到的是用scrapy,数据爬 ...
还没有用过python链接数据库,{:1_907:}{:1_907:},不过感大佬的建议,我会尝试下改一改的
页:
[1]