小白学爬虫---爬取中国房价工资比

文章概要

这是一个比较简单的爬虫项目,但是牵扯到一些python的基础知识,所以如果你是零基础的同学,也不用着急,先对爬虫有一个初步的认识,培养一个爬虫的正确思路是最重要的

网站地址:https://news.house.qq.com/a/20170702/003985.htm

要用到的模块:

requests:请求网站,获取网站的请求
bs4,re:解析网站,解析出你想要爬取的内容
xlwt:保存爬取下来的数据,对excel表格进行操作

开始撸代码

1.先把刚才安装的模块导入进来

import  requests
import bs4
import re
import xlwt

2.自定义函数,用requests模块请求网站,并且拿到网站的请求头

def open_url(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}
    html = requests.get(url,headers=headers)
    return html

3.写函数main把网站url传入进去,调用刚才的自定义函数open_url,print输出函数看是否拿到了源码,写好之后写主函数入口

def main():
    url = "https://news.house.qq.com/a/20170702/003985.htm"
    html = open_url(url)
    print(html.text)
if __name__ == '__main__':
    main()

4.开始用beautifulsoup解析网站,先用开发者工具定位城市的文字信息,你会发现,在一个div id的标签中
在这里插入图片描述
代码如下:

def find_data(html):
    soup = bs4.BeautifulSoup(html.text, 'html.parser')
    content = soup.find(id="Cnt-Main-Article-QQ")
    print(content)

注:html.parser是python所自带的一个解析方式,此时的运行效果
在这里插入图片描述
认真分析,你会发现,他在一个p标签 style="TEXT-INDENT: 2em"里,接下来我们再一步去解析

    target = content.find_all("p", style="TEXT-INDENT: 2em")
    for tar in target:
        print(tar.text)

由于他是一个列表,所以我们可以去迭代打印,有一句话说,普通程序员用迭代,天才程序员用~~~,哈哈,你可以猜猜,不过咱们可能当不了天才程序员。。。。
此时的运行效果:
在这里插入图片描述
如果你做到了这一步来了,那你此时会发现一些没有用的数据,前面和后面都加上了一些没有用的东西,此时你需要去分析他们的特点,前面都跟了一个数字,迭代的过程中我们可以用isnumeric判断,如果这行是个纯数字的话,那我就把下面的四行单独迭代,放到data的列表里去,你需要新建一个data的列表
并且使用正则表达式去提取我么想要的数据
列表是一个可迭代的对象,但并不是一个迭代器,我们可以用iter函数变成一个迭代器,代码可能对零基础的人来说稍微有些吃力

target = iter(target)
    for tar in target:
        if tar.text.isnumeric():
            data.append([
                re.search(r'\[(.+)\]', next(target).text).group(1),
                re.search(r'\d.*', next(target).text).group(),
                re.search(r'\d.*', next(target).text).group(),
                re.search(r'\d.*', next(target).text).group()
            ])
    return data

5.终于拿到想要的数据了,下一步我们用xlwt模块把数据保存到excel表格中去

def to_excel(data):
    wb = xlwt.Workbook()   #先生成一个Workbook的对象
    ws = wb.add_sheet('sheet1') #获取一个工作表

    headdata = ['城市', '平均房价', '平均工资', '房价工资比']
    for colnum in range(0,4):
        ws.write(0,colnum,headdata[colnum],xlwt.easyxf('font:bold on'))
    index = 1
    for j in range(0,len(data)):
        for i in range(0,4):
            ws.write(index,i,data[j][i])
        index += 1
    wb.save("no3.xls")

代码对于零基础的同学来说肯定是有些难度的,如果你刚开始学习python,一定要有耐心,遇到bug了尽量淡定些,因为在成为程序员的路上,bug是无处不在的,我们可以来看一下最终我们实现的效果
在这里插入图片描述
看这三年前房价工资比吧,你一定会觉得你现在的薪资在买得起房子之前是杯水车薪,所以,少年们,奋斗吧

第一次写博客,还不怎么会操作,可能会稍微low一点,友军勿介意

发布了1 篇原创文章 · 获赞 4 · 访问量 439

猜你喜欢

转载自blog.csdn.net/ITdancerdan/article/details/104843220