文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【Python】编程练习的解密与实战(三)

2024-01-21 16:11

关注

​🌈个人主页:Sarapines Programmer
🔥 系列专栏:《Python | 编程解码》
⏰诗赋清音:云生高巅梦远游, 星光点缀碧海愁。 山川深邃情难晤, 剑气凌云志自修。

目录

🪐1. 初识Python

🪐2. 实验报告三

🌍实验目的

🌍实验要求

🌍实验代码

🌍实验结果

🌍实验体会

📝总结


🪐1. 初识Python

Python是一种高级、通用、解释型的编程语言,具有简洁而清晰的语法,被广泛应用于软件开发、数据科学、人工智能等领域。以下是Python技术的一些主要特点和应用领域:

  1. 易学易用: Python的语法设计简单,容易学习和理解。这使得它成为初学者和专业开发人员的首选语言之一。

  2. 开源: Python是开源的,任何人都可以查看、修改和分发其源代码。这为开发者提供了自由和灵活性。

  3. 跨平台: Python可在多个操作系统上运行,包括Windows、Linux和macOS,使其成为跨平台开发的理想选择。

  4. 强大的社区支持: Python拥有庞大的全球开发者社区,用户可以获得丰富的文档、库和工具,方便解决各类问题。

  5. 广泛应用领域: Python在多个领域都有应用,包括Web开发、数据科学、机器学习、人工智能、自动化测试、网络编程等。

  6. 丰富的第三方库: Python拥有丰富的第三方库和框架,如NumPy、Pandas、Django、Flask等,提供了强大的工具来简化开发流程。

  7. 动态类型: Python是一种动态类型语言,允许开发者更加灵活地进行变量和对象的操作。

  8. 面向对象编程: Python支持面向对象编程,使得代码结构更加模块化、可维护性更强。

总体而言,Python是一门功能强大、灵活易用的编程语言,适用于各种规模和类型的项目,从小型脚本到大型应用,都能够得心应手。


🪐2. 实验报告三

🌍实验目的


🌍实验要求

  1. 操作书上第六章的内容: 在实际操作中,重点涉及书本的第六章内容,这可能包括特定主题或技术领域,需要深入学习和理解。

  2. 爬取并下载当当网某一本书的网页内容: 通过编写Python代码,实现对当当网上某一本书的网页内容进行爬取,并将其保存为HTML格式,这涉及到网络爬虫技术的应用。

  3. 在豆瓣网上爬取某本书的前50条短评内容并计算评分的平均值: 运用自学的正则表达式技能,爬取豆瓣网上某本书的前50条短评内容,并计算这些评分的平均值,为数据分析提供基础。

  4. 从长沙房产网爬取长沙某小区的二手房信息: 以名都花园为例,通过网络爬虫技术从长沙房产网(长沙链家网)上获取该小区的二手房信息,并将这些信息保存到EXCEL文件中,为房产数据的整理和分析提供便利。


🌍实验代码

1. 操作书上第六章的内容

import pandas as pddf=pd.read_csv("wowo.csv")dfpd.read_table("wowo.csv",sep=",")df=pd.read_csv("wowo.csv",header=None)dfdf=pd.read_csv("wowo.csv",names=['a','b','c','d','message'])df#cat用/而type用\!type .\wowo.csvnames=['a','b','c','d','message']df=pd.read_csv("wowo.csv",names=names,index_col='message')dfdf=pd.read_csv("wowo.csv",names=names,skiprows=[0,2,3]) #跳过第一、三、四行df

2. 爬取并下载当当网某一本书的网页内容

import urllib.request    #做爬虫时要用到的库   #定义百度函数  def dangdang_shuji(url,begin_page,end_page):      #三个参数: 链接+开始页数+结束页数      for i in range(begin_page, end_page+1):          #从开始页数到结束页数,因为range性质所以要想到达end_page得到达end_page+1        sName = str(i).zfill(5) + '.html'             #填充为.html文件名        #zfill(5)表示数字前自动补0,加上字符转化的整型i一共占五位        print ('正在下载第' + str(i) + '个网页,并将其存储为' + sName + '......')          #显示爬虫细节        f = open(sName,'wb+')                #w+以纯文本方式读写,而wb+是以二进制方式进行读写                      m = urllib.request.urlopen(url+str(i)) .read()          #urllib.request请求模块        #urlopen实现对目标url的访问        #可用参数        #url:  需要打开的网址        #data:Post提交的数据        #timeout:设置网站的访问超时时间        f.write(m)          f.close()        #调用部分bdurl = str(input('请输入您在当当网上搜索的关于某本书的网页地址:'))# 注意输入网址 https://book.dangdang.com/begin_page = int(input(u'请输入开始的页数:\n')) #将输入的字符串类型转化为整型end_page = int(input(u'请输入终点的页数:\n'))  #同上dangdang_shuji(bdurl,begin_page,end_page)    #调用函数

3. 在豆瓣网上爬取某本书的前50条短评内容并计算评分的平均值

import requests, re, time  #获取响应时间与超时count = 0i = 0sum, count_s = 0, 0while(count < 50):  #访问前50条记录  if(i==0):  #首页内容    try:      proxies = {'http': '120.236.128.201:8060','https': '120.236.128.201:8060'}      headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}      url = 'https://book.douban.com/subject/3674537/comments/?limit=20&status=P&sort=score'      r = requests.get(url=url,headers=headers)    except Exception as err:      print(err)      #打印输出错误信息      break  #其他页的内容  else:      start = i*20    #url中start的值      try:        proxies = {'http': '120.236.128.201:8060','https': '120.236.128.201:8060'}        headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}        url='https://book.douban.com/subject/3674537/comments/?start='+str(start)+'&limit=20&status=P&sort=score'        r = requests.get(url=url,headers=headers)        # print('第'+str(i)+'页内容')      except Exception as err:        print(err)        break  soup = BeautifulSoup(r.text, 'lxml')  # comments = soup.find_all('p', 'comment-content')  #查找所有tag值为p,class标签为comment-content的内容  comments = soup.find_all('span', class_='short')  for item in comments:    count = count + 1    # print(count, item.string)    print(count,item.get_text())    #打印用户评论    if count == 50:      break   pattern = re.compile('=50):                break        i+=1        #下一页        time.sleep(5)         # 停顿5秒    print("评分表  :  ",score_list)        #计算平均分    length=len(score_list)    print("一共%d条信息"%length)    sum_score=0    #计算总和,然后求平均分    for i in score_list:        sum_score+=i    avg=sum_score/length    print("豆瓣前50评价 总分为:",sum_score,"平均分:",avg)#调用函数douBan()

4. 从长沙房产网爬取长沙某小区的二手房信息

import requests as requimport requests#获取响应时间与超时from bs4 import BeautifulSoup#html的解析器,主要功能是解析和提取数据import xlwt#xlwt将数据和样式信息写入excel表格的库 def getHouseList(url):    "获取房源信息:、链接地址、户型、面积、朝向、总价、所属区域、套内面积"    house =[]    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}       #解析内容    res = requests.get(url,headers=headers)    soup = BeautifulSoup(res.content,'html.parser')    housename_divs = soup.find_all('div',class_='title')    #查找该html网页中tag值为div、class值为title的部分    #指定属性查找标签        for housename_div in housename_divs:        housename_as=housename_div.find_all('a')        #参数解释:在原网页中,div标志下有一个叫"a"的超链接。所以次数找tag值为a的元素        #返回值:对象数组,对象内容为a超链接中的属性)        for housename_a in housename_as:            housename=[]            housename.append(housename_a.get_text())            #得到超链接中的文字内容,放在housename列表中            housename.append(housename_a.get('href'))            house.append(housename)            #获取超链接中的链接,放在house列表中    huseinfo_divs = soup.find_all('div',class_='houseInfo')    #参数解释:获取该网页中tag值为div,class值为houseInfo    for i in range(len(huseinfo_divs)):        info = huseinfo_divs[i].get_text()#获取houseInfo中的        infos = info.split('|')        #原网页以|符号分割的,这里以此做分割        #小区名称        house[i].append(infos[0])        #户型        house[i].append(infos[1])        #平米        house[i].append(infos[2])    house_prices = soup.find_all('div',class_='totalPrice')    #函数作用:获取网页中tag值为div,且class值为totalPrice的内容    for i in range(len(house_prices)):        price = house_prices[i].get_text()        #获取文字内容        house[i].append(price)    return house #爬取房屋详细信息:所在区域、套内面积def houseinfo(url):    #为什么要分为两个函数?因为这个网页中,输入一个url只是得到一些基本信息    #而详细信息需要到从基本信息中的链接再去提取    headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER'}    res = requests.get(url,headers=headers)    soup = BeautifulSoup(res.content,'html.parser')    #headers、res、soup与getHouseList()函数中一致。基本上可以作为固定不变的部分    msg =[]    #获取房源的所在区域    areainfos = soup.find_all('span',class_='info')    #获取网页中tag值为span,class为info的内容(以具体网页内容为准)    for areainfo in areainfos:        #只需要获取第一个a标签的内容即可        area = areainfo.find('a')        #找到tag值为a(超链接)的内容。返回一个对象数组        #具体内容为:herf、target、text        if(not area):#如果area为null            continue#如果没有这部分信息就跳过        hrefStr = area['href']#提取该房源的链接        if(hrefStr.startswith('javascript')):            continue        msg.append(area.get_text())#获取房源所在的地区名称        break#由于只需要获取第一个a标签的内容,所以此时就可以跳出循环    #根据房屋户型计算套内面积    infolist = soup.find_all('div',id='infoList')    #获取tag值为div,id为infolist的内容    #注意网站标注的总面积与实际的套内面积是不一样的,所以需要重新计算    num = []    for info in infolist:        cols = info.find_all('div',class_='col')        #网站中包含col列的有很多,包括面积、方位、名称等等        #老师的方法是遍历所有的col,        #我觉得更好的方法是将包含平米的col单独提取出来,这样就无需使用try        for i in cols:            pingmi = i.get_text()#获取(面积,即xxx平米)            try:                #尝试从string中提取数字                a = float(pingmi[:-2])#从开头到距离尾部2个字符,即把"平米"汉字去掉了                num.append(a)            except ValueError:                #如果出错就跳出                continue    msg.append(sum(num))#计算各户型的总面积    return msg def writeExcel(excelPath,houses):    "#将爬取数据写入excel文件"    #excelPath:excel文件存储的路径,houses:包含房源基本信息的列表    workbook = xlwt.Workbook()    #函数作用:新建一个工作簿    sheet = workbook.add_sheet('git')    #添加一行    row0=['','链接地址','户型','面积','朝向','总价','所属区域','套内面积']    for i in range(0,len(row0)):        sheet.write(0,i,row0[i])        #作为excel表列索引    for i in range(0,len(houses)):        house = houses[i]        print(house)        for j in range(0,len(house)):            sheet.write(i+1,j,house[j])            #数据写完一行接上一行    workbook.save(excelPath)    #将excel工作簿保存到指定位置 #主函数def main():    data = []    for i in range(1,5):        print('-----分隔符',i,'-------')        #i从1到4        if i==1:            url ='https://cs.lianjia.com/ershoufang/c3511059937033rs%E5%90%8D%E9%83%BD%E8%8A%B1%E5%9B%AD/'            #此时i=1时url指向该地址        else:            url='https://cs.lianjia.com/ershoufang/pg'+str(i)+'c3511059937033rs%E5%90%8D%E9%83%BD%E8%8A%B1%E5%9B%AD/'            #i不等于1时url执行不同位置                houses =getHouseList(url)                for house in houses:            link = house[1]            if(not link or not link.startswith('http')):                #无法连接或连接协议不是http,使用continue跳出循环                continue            mianji = houseinfo(link)            house.extend(mianji)        data.extend(houses)        #将数据整合到daya里统一写入excel表    writeExcel('d:/cs.xls',data)    if __name__ == '__main__':    main()    #如果模块是被直接运行的,则代码块被运行,    #如果模块是被导入的,则代码块不被运行

🌍实验结果

1.问题一

2.问题二

3.问题三

4.问题四


🌍实验体会

  1. 实验学习和爬虫指令使用

    • 通过实验首次接触了使用Python进行爬虫,学到了相关爬虫指令,并成功爬取了当当网和长沙二手房的信息。
    • 发现在Linux系统下使用cat语法访问.csv文件,而在Windows系统下要使用type,需要注意斜线的差异。
  2. 对Python库的认识和意识拓展

    • 在此实验中,通过社区查阅了相关资源,附上了详细注释,深化了对爬虫的理解。
    • 意识到Python语言的强大之处,不论是机器学习的scikit-learn库还是爬虫的requests库,都涉及到Python,并体会到其调用封装在不同的库中。
  3. 爬虫问题解决和环境疑惑

    • 遇到在Jupyter Notebook中出现‘int’ object is not callable的问题,通过重新创建文件解决,但对问题原因产生疑惑。
    • 怀疑问题可能与装了PyTorch导致与Python两个虚拟环境冲突,但并未做实质修改,问题自行解决,留下疑惑。

📝总结

Python领域就像一片未被勘探的信息大海,引领你勇敢踏入Python数据科学的神秘领域。这是一场独特的学习冒险,从基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法和智能模式识别的奥秘。

渴望挑战Python信息领域的技术?不妨点击下方链接,一同探讨更多Python数据科学的奇迹吧。我们推出了引领趋势的💻 Python数据科学专栏:《Python | 编程解码》,旨在深度探索Python模式匹配技术的实际应用和创新。🌐🔍

来源地址:https://blog.csdn.net/m0_57532432/article/details/135510229

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯