找回密码
 会员注册
查看: 19|回复: 0

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

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-9 17:43:26 | 显示全部楼层 |阅读模式
⏰诗赋清音:云生高巅梦远游,星光点缀碧海愁。山川深邃情难晤,剑气凌云志自修。目录🪐1.初识Python🪐2.研究报告三🌍研究目的🌍研究要求🌍研究代码🌍研究结果🌍研究体会📝总结🪐1.初识PythonPython是一种高级、通用、解释型的编程语言,具有简洁而清晰的语法,被广泛应用于软件开发、数据科学、人工智能等领域。以下是Python技术的一些主要特点和应用领域:易学易用:Python的语法设计简单,容易学习和理解。这使得它成为初学者和专业开发人员的首选语言之一。开源:Python是开源的,任何人都可以查看、修改和分发其源代码。这为开发者提供了自由和灵活性。跨平台:Python可在多个操作系统上运行,包括Windows、Linux和macOS,使其成为跨平台开发的理想选择。强大的社区支持:Python拥有庞大的全球开发者社区,用户可以获得丰富的文档、库和工具,方便解决各类问题。广泛应用领域:Python在多个领域都有应用,包括Web开发、数据科学、机器学习、人工智能、自动化测试、网络编程等。丰富的第三方库:Python拥有丰富的第三方库和框架,如NumPy、Pandas、Django、Flask等,提供了强大的工具来简化开发流程。动态类型:Python是一种动态类型语言,允许开发者更加灵活地进行变量和对象的操作。面向对象编程:Python支持面向对象编程,使得代码结构更加模块化、可维护性更强。总体而言,Python是一门功能强大、灵活易用的编程语言,适用于各种规模和类型的项目,从小型脚本到大型应用,都能够得心应手。🪐2.研究报告三🌍研究目的JupyterNotebook编程工具基本用法:学习掌握JupyterNotebook编程工具的基本用法。Python读取CSV文件:理解并熟悉使用Python编程语言读取CSV文件的方法。学习使用爬虫:通过学习,熟悉爬虫技术的使用,掌握在Python环境下进行网络爬取的基本知识和技能。🌍研究要求操作书上第六章的内容:在实际操作中,重点涉及书本的第六章内容,这可能包括特定主题或技术领域,需要深入学习和理解。爬取并下载当当网某一本书的网页内容:通过编写Python代码,实现对当当网上某一本书的网页内容进行爬取,并将其保存为HTML格式,这涉及到网络爬虫技术的应用。在豆瓣网上爬取某本书的前50条短评内容并计算评分的平均值:运用自学的正则表达式技能,爬取豆瓣网上某本书的前50条短评内容,并计算这些评分的平均值,为数据分析提供基础。从长沙房产网爬取长沙某小区的二手房信息:以名都花园为例,通过网络爬虫技术从长沙房产网(长沙链家网)上获取该小区的二手房信息,并将这些信息保存到EXCEL文件中,为房产数据的整理和分析提供便利。🌍研究代码1. 操作书上第六章的内容importpandasaspddf=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])#跳过第一、三、四行df2. 爬取并下载当当网某一本书的网页内容importurllib.request#做爬虫时要用到的库#定义百度函数defdangdang_shuji(url,begin_page,end_page):#三个参数:链接+开始页数+结束页数foriinrange(begin_page,end_page+1):#从开始页数到结束页数,因为range性质所以要想到达end_page得到达end_page+1sName=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条短评内容并计算评分的平均值importrequests,re,time#获取响应时间与超时count=0i=0sum,count_s=0,0while(count=50):breaki+=1#下一页time.sleep(5)#停顿5秒print("评分表:",score_list)#计算平均分length=len(score_list)print("一共%d条信息"%length)sum_score=0#计算总和,然后求平均分foriinscore_list:sum_score+=iavg=sum_score/lengthprint("豆瓣前50评价总分为:",sum_score,"平均分:",avg)#调用函数douBan()4. 从长沙房产网爬取长沙某小区的二手房信息importrequestsasrequimportrequests#获取响应时间与超时frombs4importBeautifulSoup#html的解析器,主要功能是解析和提取数据importxlwt#xlwt将数据和样式信息写入excel表格的库defgetHouseList(url):"获取房源信息:、链接地址、户型、面积、朝向、总价、所属区域、套内面积"house=[]headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/21.0.1180.71Safari/537.1LBBROWSER'}#解析内容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的部分#指定属性查找标签forhousename_divinhousename_divs:housename_as=housename_div.find_all('a')#参数解释:在原网页中,div标志下有一个叫"a"的超链接。所以次数找tag值为a的元素#返回值:对象数组,对象内容为a超链接中的属性)forhousename_ainhousename_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值为houseInfoforiinrange(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的内容foriinrange(len(house_prices)):price=house_prices[i].get_text()#获取文字内容house[i].append(price)returnhouse#爬取房屋详细信息:所在区域、套内面积defhouseinfo(url):#为什么要分为两个函数?因为这个网页中,输入一个url只是得到一些基本信息#而详细信息需要到从基本信息中的链接再去提取headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/21.0.1180.71Safari/537.1LBBROWSER'}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的内容(以具体网页内容为准)forareainfoinareainfos:#只需要获取第一个a标签的内容即可area=areainfo.find('a')#找到tag值为a(超链接)的内容。返回一个对象数组#具体内容为:herf、target、textif(notarea):#如果area为nullcontinue#如果没有这部分信息就跳过hrefStr=area['href']#提取该房源的链接if(hrefStr.startswith('javascript')):continuemsg.append(area.get_text())#获取房源所在的地区名称break#由于只需要获取第一个a标签的内容,所以此时就可以跳出循环#根据房屋户型计算套内面积infolist=soup.find_all('div',id='infoList')#获取tag值为div,id为infolist的内容#注意网站标注的总面积与实际的套内面积是不一样的,所以需要重新计算num=[]forinfoininfolist:cols=info.find_all('div',class_='col')#网站中包含col列的有很多,包括面积、方位、名称等等#老师的方法是遍历所有的col,#我觉得更好的方法是将包含平米的col单独提取出来,这样就无需使用tryforiincols:pingmi=i.get_text()#获取(面积,即xxx平米)try:#尝试从string中提取数字a=float(pingmi[:-2])#从开头到距离尾部2个字符,即把"平米"汉字去掉了num.append(a)exceptValueError:#如果出错就跳出continuemsg.append(sum(num))#计算各户型的总面积returnmsgdefwriteExcel(excelPath,houses):"#将爬取数据写入excel文件"#excelPath:excel文件存储的路径,houses:包含房源基本信息的列表workbook=xlwt.Workbook()#函数作用:新建一个工作簿sheet=workbook.add_sheet('git')#添加一行row0=['','链接地址','户型','面积','朝向','总价','所属区域','套内面积']foriinrange(0,len(row0)):sheet.write(0,i,row0[i])#作为excel表列索引foriinrange(0,len(houses)):house=houses[i]print(house)forjinrange(0,len(house)):sheet.write(i+1,j,house[j])#数据写完一行接上一行workbook.save(excelPath)#将excel工作簿保存到指定位置#主函数defmain():data=[]foriinrange(1,5):print('-----分隔符',i,'-------')#i从1到4ifi==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)forhouseinhouses:link=house[1]if(notlinkornotlink.startswith('http')):#无法连接或连接协议不是http,使用continue跳出循环continuemianji=houseinfo(link)house.extend(mianji)data.extend(houses)#将数据整合到daya里统一写入excel表writeExcel('d:/cs.xls',data)if__name__=='__main__':main()#如果模块是被直接运行的,则代码块被运行,#如果模块是被导入的,则代码块不被运行🌍研究结果1.问题一2.问题二3.问题三4.问题四🌍研究体会实验学习和爬虫指令使用通过实验首次接触了使用Python进行爬虫,学到了相关爬虫指令,并成功爬取了当当网和长沙二手房的信息。发现在Linux系统下使用cat语法访问.csv文件,而在Windows系统下要使用type,需要注意斜线的差异。对Python库的认识和意识拓展在此实验中,通过社区查阅了相关资源,附上了详细注释,深化了对爬虫的理解。意识到Python语言的强大之处,不论是机器学习的scikit-learn库还是爬虫的requests库,都涉及到Python,并体会到其调用封装在不同的库中。爬虫问题解决和环境疑惑遇到在JupyterNotebook中出现‘int’objectisnotcallable的问题,通过重新创建文件解决,但对问题原因产生疑惑。怀疑问题可能与装了PyTorch导致与Python两个虚拟环境冲突,但并未做实质修改,问题自行解决,留下疑惑。📝总结Python领域就像一片未被勘探的信息大海,引领你勇敢踏入Python数据科学的神秘领域。这是一场独特的学习冒险,从基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法和智能模式识别的奥秘。渴望挑战Python信息领域的技术?不妨点击下方链接,一同探讨更多Python数据科学的奇迹吧。我们推出了引领趋势的💻Python数据科学专栏:《Python|编程解码》,旨在深度探索Python模式匹配技术的实际应用和创新。🌐🔍
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 20:03 , Processed in 0.479483 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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