Python爬虫实验作业

1.首先进行pycharm与数据库sqlite的连接

数据库的创建:

import sqlite3
conn=sqlite3.connect("test.db")
c=conn.cursor()                 
sql = '''
    create table homes
    (
    id integer primary key autoincrement,
    info_link text,
    place text,
    xiaoqu text,
    size numeric,
    chaoxiang varchar,
    huxing text,
    type text,
    num numeric,
    subway text,
    decoration text,
    key text,
    new text,
    time text,
    money numeric
    )
''' 

c.execute(sql)                  
conn.commit()                   
conn.close()
print("ok")

执行后同目录出现test.db数据库文件

连接后数据库表如下

 2.爬虫代码:

import re
from bs4 import BeautifulSoup
import urllib.request,urllib.error 
import sqlite3 

#爬虫伪装函数

def askURL(url):
    head = {  
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"
    }
 
    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")

    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html


#正则表达式

# 区域
findplace1 = re.compile(
    r'<a href="/zufang/.*" target="_blank">(.*)</a>-<a href="/zufang/.* target="_blank">.*</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>') 

findplace2 = re.compile(
    r'<a href="/zufang/.*" target="_blank">.*</a>-<a href="/zufang/.* target="_blank">(.*)</a>-<a href="/zufang.*" target="_blank" title=".*">.*</a>')

findplace3 = re.compile(
    r'<a href="/zufang/.*" target="_blank">.*</a>-<a href="/zufang/.* target="_blank">.*</a>-<a href="/zufang.*" target="_blank" title=".*">(.*)</a>')

#房子大小
finddaxiao = re.compile(r'<i>/</i>(.*)<i>/</i>.*<i>/</i>.*<span class="hide">',re.S)    #re.s让换行符包含在字符中
#房子朝向
findfangxiang = re.compile(r'<i>/</i>.*<i>/</i>(.*)<i>/</i>.*<span class="hide">',re.S)
#房子规格
findguige = re.compile(r'<i>/</i>.*<i>/</i>.*<i>/</i>(.*)<span class="hide">',re.S)
#楼层类型
findleixing = re.compile(r'<p class="content__list--item--des">.*<i>/</i>(.*)</span>.*</p>.*<p class="content__list--item--bottom oneline">',re.S)
#是否靠近地铁
findsubway = re.compile(r'<i class="content__item__tag--is_subway_house">(.*)</i>')
#是否是精装
finddecoration = re.compile(r'<i class="content__item__tag--decoration">(.*)</i>')
#是否可以随时看房
findkey = re.compile(r'<i class="content__item__tag--is_key">(.*)</i>')
#是否是新上的
findnew = re.compile(r'<i class="content__item__tag--is_new">(.*)</i>')
#维护时间
findtime = re.compile(r'<span class="content__list--item--time oneline">(.*)</span>')
#平均租金
findmoney = re.compile(r'<span class="content__list--item-price"><em>(.*)</em>')


#解析数据

def getData(baseurl):  # 调用获取页面信息的函数
    datalist = []  # 分配暂存的空间
    for i in range(0, 5):
        url = baseurl + str(i)
        html = askURL(url)  # 保存获取到的网页源码

        # 逐一解析数据(边获取边解析)
        soup = BeautifulSoup(html, "html.parser")  
        for item in soup.find_all('div', class_="content__list--item"):  
            # print(item) #测试:查看链家item全部信息
            data = []
            item = str(item) 


            place1 = re.findall(findplace1, item)[0]  # re库用来通过正则表达式查找指定的字符串
            place2 = re.findall(findplace2, item)[0]
            place3 = re.findall(findplace3, item)[0]
            place = place1 + '-' + place2
            data.append(place)  

            data.append(place3)  

            daxiao = re.findall(finddaxiao, item)[0]
            daxiao = daxiao.strip()
            data.append(daxiao.replace("㎡", ""))  

            fangxiang = re.findall(findfangxiang, item)[0]
            data.append(fangxiang.replace(" ", ""))  

            guige = re.findall(findguige, item)[0]
            data.append(guige.replace(" ", ""))  

            leixing1 = re.findall(findleixing, item)[0]
            leixing2 = leixing1.strip()  # 去掉前后空格
            leixing3 = leixing2.replace(" ", "")  # 将空格替换掉
            data.append(leixing3[0:3])  

            data.append(leixing3[4:8].replace("层)", ""))  

            subway = re.findall(findsubway, item)  
            if (len(subway)) != 0:
                subway = subway[0]
                data.append(subway)  
            else:
                data.append("不靠近地铁")  

            decoration = re.findall(finddecoration, item)
            if len(decoration) != 0:
                decoration = decoration[0]
                data.append(decoration)  
            else:
                data.append("不是精装")  

            key = re.findall(findkey, item)
            if len(key) != 0:
                key = key[0]
                data.append(key)  
            else:
                data.append("不是随时看房")  

            new = re.findall(findnew, item)
            if len(new) != 0:
                new = new[0]
                data.append(new) 
            else:
                data.append("不是新上") 

            time = re.findall(findtime, item)[0]
            data.append(time) 

            money = re.findall(findmoney, item)[0]
            data.append(money)  

            datalist.append(data)  # 将data中的数据放入datalist中
    return datalist

#存入数据库
def saveData2DB(datalist):
    conn = sqlite3.connect("test.db")  # 链接数据库
    cur = conn.cursor()  
    for data in datalist:
        for index in range(len(data)):
            if index == 2 or index == 6 or index == 12:  # 遇见numeric类型时不转换成"xx"型
                continue
            data[index] = '"' + data[index] + '"'  # 转换成"xx"型
        sql = '''
                insert into homes (
                place,xiaoqu,size,chaoxiang,huxing,type,num,subway,decoration,key,new,time,money)
                values(%s)''' % ",".join(data)
        cur.execute(sql)  # 执行sql语句
        conn.commit()  # 提交结果
    cur.close()  # 关闭游标
    conn.close()  # 关闭连接

    print("save....")

#执行程序入口
if __name__ == "__main__":
    baseurl = 'https://sh.lianjia.com/zufang/'
    datalist=getData(baseurl)
    #print(datalist)
    saveData2DB(datalist)


结果:

如图显示,存储成功,数据存入到sqlite数据库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 网络爬虫是一种自动化工具,它可以帮助我们在互联网上收集数据。本次大作业涉及到的网络爬虫是用Python编写的,它可以通过简单的代码来爬取任何网站上的数据。 数据分析是一项将数据转化为有意义的信息的工作。本次大作业的数据分析部分将借助Python编程语言中的数据分析库,对爬取到的数据进行深入分析,提取各种有用信息并呈现出来。 本次大作业的目的是让我们深入了解网络爬虫和数据分析的流程,包括从数据的爬取到数据的处理和呈现。在网络爬虫的开发中,我们需要考虑如何代码简洁高效地爬取数据,并注意数据存储的方式以及防止爬虫被网站封禁的问题。在数据分析的过程中,我们需要清楚地了解所要分析的数据类型,选择合适的数据分析方法,并注意数据可视化的呈现方式。 本次大作业对我们的学习和未来的工作都具有重要意义。通过此次大作业,我们可以深入了解网络爬虫和数据分析的流程,理解数据的价值和意义,并将其运用到实际工作中。 ### 回答2: Python网络爬虫和数据分析是现代技术领域中非常重要的工具,它们能够帮助我们从大量的数据中提取有价值的信息和知识。在Python网络爬虫中,我们可以通过编写代码来自动化地访问网站并从网站中获取我们需要的信息和数据。这些数据可以用于构建网站的数据库、分析市场趋势和识别潜在的机会。 然后,我们可以用数据分析技术来分析这些数据并提取出我们所需的信息。例如,我们可以使用Python中的Pandas库来处理和分析数据。我们可以使用这个工具来统计数据、处理缺失值、进行数据可视化和探索性数据分析等。 通过Python网络爬虫和数据分析的大作业,我们可以学习到如何在Python中编写代码来实现自动化和半自动化的网页爬取。我们也可以学习如何将网页数据转换为结构化数据,并使用Pandas等库来对该数据进行统计和分析。此外,我们还可以深入了解其他的数据分析技术,例如数据可视化和机器学习等。 通过完成Python网络爬虫和数据分析的大作业,我们可以掌握这些强大的工具,并应用到我们的日常实践中,进一步提高我们的工作效率和数据分析能力。 ### 回答3: 本次大作业要求使用Python进行网络爬虫和数据分析。网络爬虫是一种自动化获取网页信息的技术,常用于数据采集。而数据分析则是对采集到的数据进行处理和分析,以得出有意义的结论。因此,本作业的要求是使用Python编写一个网络爬虫程序,自动获取指定网站的信息,并对所采集到的数据进行处理和分析。 在实现网络爬虫时,需要掌握相关的库和技术,例如requests、beautifulsoup、selenium等。首先需要明确采集的目标和规则,并对爬虫程序进行优化,避免对目标网站造成干扰。同时也需要注意爬虫的道德和法律问题,例如遵守robots协议、避免隐私泄露等。 在完成数据采集后,需要对数据进行清洗和处理。这包括数据去重、过滤、清理缺失值等操作。同时,需要针对不同的业务需求,进行数据可视化、聚类、分类等分析,以得出有意义的结论。 总的来说,本次作业考察了Python编程、网络爬虫、数据处理和分析的能力。通过综合利用这些技术,可以快速获取、清洗、分析和展示大量的数据,对实际问题提出有效的建议和解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值