吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 875|回复: 6
收起左侧

[讨论] 学了一学期Python,自己写的爬虫,请大佬们指正

  [复制链接]
Ybing1021 发表于 2020-7-23 10:25
老师课上只讲简单的语法,自己只能看教程摸索着学习,请大佬帮忙瞧瞧。
程序实现就是简单的把租房的房价爬下来再画出图来。
[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[i].string                #将标签中字符串保存到列表
        # print(name)
        f_name.append(name)
    for i in range(len(f_name)):
        print('{},{}'.format(i,f_name[i]))

    # 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[i].find_all('span',{'class':'num'})
        for j in range(len(Price)):
            price=eval(Price[j].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[i].find_all('span',string=re.compile('㎡'))       #正则表达式抓取平方
        for j in range(len(Size)):
            size=Size[j].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[i][1])
        f_size.append(S[i][2])
        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[j])
            price.append(p[j])
            size.append(s[j])
    n=len(name)
    for i in range(n):
        f_List.append([name[i],price[i],size[i]])
    print("总抓取__{:_^20}__条租房信息。。。".format(len(f_List)))
    # print(f_List)
    sortList=sorted(f_List,key=(lambda x:x[2]))     #给列表排序
    # print(sortList)
    printPlt(sortList)                           #给绘图函数传入列表

if __name__ == '__main__':
        main()





免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
wagnbin + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

li13557771405 发表于 2020-7-23 14:52
你应该...............我配指导你吗
 楼主| Ybing1021 发表于 2020-7-23 16:01
 楼主| Ybing1021 发表于 2020-7-23 16:02
17720264720 发表于 2020-7-23 12:44
太秀了,作图简直了,优秀

一开始没想作图,只是感觉爬取数据太单调了,直接拿来做个图比较明显。。。。
thepoy 发表于 2020-7-24 00:00
看不出来有什么问题,requests爬数据大概都这样吧。一般涉及到翻页数据,我第一个想到的是用scrapy,数据爬到数据库里,再从数据库取数据进行处理。
绘图是真秀,我是从来没想过爬完数据直接绘图的,都是保存好数据后再处理。
 楼主| Ybing1021 发表于 2020-7-24 09:53
thepoy 发表于 2020-7-24 00:00
看不出来有什么问题,requests爬数据大概都这样吧。一般涉及到翻页数据,我第一个想到的是用scrapy,数据爬 ...

还没有用过python链接数据库,,不过感大佬的建议,我会尝试下改一改的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 14:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表