人生苦短,我玩蛇

in python with 0 comment

前不久,一直忙毕业论文的事,改格式呀,查重呀。然后改呀,来来回回的。查重过了,导师布置任务做答辩ppt,现在全搞完了。

闲的我,学了下Python,玩了下蛇。

不得不说,Python的语法,简单的令人发指。。看完了基础篇,然后看爬虫,玩玩蛇。

看人家视频爬了下豆瓣的top250电影,然后自己照着敲了下。闲来无事的我,又自己敲了一个bug。。

我自己敲的是在链家找的北京租房信息。。先看bug

python环境3.8
使用的库有urllib去请求
bs4解析HTML标签
SSL认证(开始没这玩意还进不去)
使用的ide是pycharm

# coding=utf-8
from bs4 import BeautifulSoup
import urllib.request
import ssl

ssl._create_default_https_context = ssl._create_unverified_context


def main():
    # baseUrl = "https://bj.lianjia.com/zufang/#contentList"
    # writeHTML(baseUrl)
    html = readHTML()
    datalist = []
    for i in range(0, 1):
        # 解析数据
        soup = BeautifulSoup(html, "html.parser")
        # 主要标签
        for item in soup.find_all("div", class_="content__list--item--main"):
            # 临时变量存储
            data = []
            # 价格
            for price in item.find_all("span", class_="content__list--item-price"):
                data.append(price.text)
            datalist.append(data)
            # 租房信息
            for info in item.find_all("p", class_="content__list--item--title twoline"):
                info = info.find("a").get_text()
                data.append(info.strip())  # 存入临时变量
            # 具体信息大小等
            for area in item.find_all("p", class_="content__list--item--des"):
                area = area.text
                area = area.replace("\n", "")
                area = area.replace(" ", "")
                data.append(area)

    for data in datalist:
        print(data)
        # pass


def readHTML():
    html = open("lianjia.html", 'r', encoding="utf-8").read()
    # print(html)
    return html


def writeHTML(url):
    head = {
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"
    }
    request = urllib.request.Request(url, headers=head)
    html = ""
    response = urllib.request.urlopen(request)
    html = response.read().decode("utf-8")
    f = open("lianjia.html", 'w')
    f.write(html)
    f.close()


if __name__ == '__main__':
    main()

做一个合格的互联网网民,我是直接把链家的北京住房信息首页的HTML信息全爬下来,然后写入一个HTML的文件里面,因为新手嘛,难免遇到bug,然后多次去请求,骚扰人家服务器也不好,担心被封,哈哈。

爬下来的HTML就是它的整个首页信息,可以直接打开,也方便自己F12分析。
image.png

运行结果如下:

image.png

最后得出结论,北京的房子是真的贵

实现逻辑就是先通过urllib库带上请求头信息去请求,如果不带上,容易418(是的,我是茶壶)

然后把响应信息写入HTML文件,这样可以避免多次请求人家服务器,没事给人家找麻烦。。。

然后正式开始解析时,就把文件中的HTML代码取出来,使用bs4来解析HTML标签,再把解析出来的数据处理一下,比如啥啥空格、转译字符啥的。

完了再解析出来的数据放入Python的列表中。。还是list叫的舒服呀。

对于未来的扩展方面,首先我代码中放了循环,可以通过url拼接的方式,来完成对分页数据的爬取,比如我的这个就只爬了一页,按逻辑来说,后面几页都可以爬。

然后对于爬出来的数据,存入数据库,再写一个项目可以对这些数据进行可视化的分析啥的。目前还没学到那里,慢慢来。。。

大概就是这个样子,而且可以直接获得具体信息的超链接,然后套娃爬取,应该可行。现在bs4用的还不是很熟练,找时间多看看它的函数。另外还要多学学正则表达式,这玩意应该对查询数据方便很多。。