热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python简易爬虫教程_原来入门爬虫竟然这么简单

爬虫技术是一个获取信息和数据的重要手段。学习用python做一个简单的爬虫。爬虫主要分为两个部分:获取数据urllib内建模块(url.request)Request

爬虫技术是一个获取信息和数据的重要手段。学习用python做一个简单的爬虫。

爬虫主要分为两个部分:

获取数据

urllib 内建模块(url.request)

Requests 第三方库

Scrapy框架

第三方的API

解析数据

BeautifulSoup库

re模块

一.从网络上取的数据

简单的爬虫是可以使用Requests库来完成的。

Requests的基本使用方法

requests.get()用来请求指定URL位置的资源,对应的是HTTP协议的GET方法。

爬虫有各式各样的,做个简单的来玩耍一下,下面以爬豆瓣读书上《利用Python进行数据分析》这本书的的书评作为例子。

最简单的爬回来一个页面import requests

r = requests.get('https://book.douban.com/subject/25779298/comments/')

with open(r'D:\demo.txt', 'w') as file:

file.writelines(r.text)

使用requests模块的get方法,从网站上把一整个页面全都保存到了本地的D盘中的demo.txt文件中。这是一个极度简单的爬虫。其中requests本身自己还有许多属性和方法,可以去官网参考学习。如果需要把爬虫收集回来的数据保存到本地的话,还需要去了解一下文件操作和数据库操作的知识。

二.把数据解析出来

一般的标签网页解析--BeautifulSoup

安装的时候要注意:Pyhton3要安装BeautifulSoup4才是正常使用的。

打开刚才生成的demo.txt文件,会发现文件中保存的是一整个页面的代码,内容十分复杂,所以需要去解析一下页面的内容,才能够把我们需要的短评抽取出来。我们先研究一下。

打开文件,或者在网页页面按F12进入调试模式会发现,短评基本上是在一个相同的class的p标签里面的

入门书,零基础看了这本书也能用python的pandas和matplotlib进行一些简单的数据分析,

数据分析不在乎用什么工具,而是有目的地去找一y些insight,下一步我需要达到的效果是:如果产生一个想法,

能用工具快速验证(如数据预处理,绘出图标等)。

引入beautifulsoup来解析一下。要使用到的lxml解析包同样是需要安装的。

修改一下刚才的极简爬虫:import requests

from bs4 import BeautifulSoup

r = requests.get('https://book.douban.com/subject/25779298/comments/')

bs = BeautifulSoup(r.text, 'lxml')

comments = bs.find_all('p', 'comment-content')

with open(r'D:\demo1.txt', 'w') as file:

for item in comments:

file.writelines(item.string)

激动的打开了demo.txt 文件后,发现天呐撸,所有的评论都窝在一行了,我们要给他区分出来,并且换行,再简单也要有点可读性。

修改一下刚才的小爬虫:file.writelines(item.string + '\n')

只要写文件的时候加入这么一个简单的换行符,就可以把每个评论换行来看了,而不是挤成一坨。

复杂细节解析--正则表达式

玩玩爬完文字评论,可以发现,豆瓣本身还是有一个评星星等级的一个评价,把这个也爬下来作为一个数据收集起来。打开网页,F12找到这个评星星会发现,这个直接读取标签内的内容不一样,它是写在标签的class里面的。例如下面的五星推荐 是 allstar50,而一个四星评价是 allstar40。

这里就需要使用正则表达式来提取这种复杂的情况。因为不是所有人都有打分,把有分数都拿出来,然后给算一个平均值作为参考。

再让小爬虫变身一下:import requests

import re

from bs4 import BeautifulSoup

# 得到评论正文

r = requests.get('https://book.douban.com/subject/25779298/comments/')

bs = BeautifulSoup(r.text, 'lxml')

comments = bs.find_all('p', 'comment-content')

# 得到评论的评分并计算总分和平均分

rule = re.compile('

comments_star = re.findall(rule, r.text)

totalsocre = 0

for star in comments_star:

totalsocre += int(star)

avgsocre = totalsocre / len(comments_star)

with open(r'D:\demo1.txt', 'w') as file:

file.write('此书的评价平均分(满分50):  ' + str(avgsocre) + '\n')

for item in comments:

file.write(item.string + '\n')

以上,完成了一个极简的爬虫。网络数据千千万,这个爬虫顶多算是蜉蝣,难以撼动各种。不过爬虫是一个强大的数据收集手段,值得与深入的学习。于此与各位学习pyhton的人们共勉。不过爬数据的时候也请查阅各网站对爬虫的限定范围,共建良好网络环境。



推荐阅读
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
author-avatar
兴霖先玲广_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有