提示:以下是本篇文章正文内容,下面案例可供参考
一、从Python编程基础中简述爬虫应用都会用到哪些pip模块以及对应的功能。
pip install reqeusts
- 1.请求头设置
headers = { ‘User-Agent’:'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:95.0) // } - 2.get请求
import requests r = requests.get(‘http://xxxxxxxxxx/get’) - 3.Post请求
r = requests.post(‘http://xxxxxxxxxxx/post’) - 4.Request还提供了:响应的获取分析、爬取二进制数据、可进行文件上传、处理cookies、会话维持的方法(持续登录)、SSL证书验证(https网页)、代理设置、超时设置、用户身份验证等方法可以移步去了解这篇文章:
链接:https://blog.csdn.net/m0_67401761/article/details/126040358
pip install bs4
*BeautifulSoup简称: bs4 。BeautifulSoup,和lxml一样,是一个html的解析器,主要功能也是解析和提取数据,通俗的讲bs4库把html源代码重新进行了格式化,从而方便我们对其中的节点、标签、属性等进行操作。
- bs_1=BeautifulSoup(r1.text,‘lxml’)两个参数:第一个参数是要解析的html文本,第二个参数是使用那种解析器,对于HTML来讲就是html.parser,这个是bs4自带的解析器
- Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml .根据操作系统不同,可以选择下列方法来安装lxml: pip install lxml”
pip install pandas
- pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据
pip install selenium
python+selenium结合来实现爬虫十分巧妙。由于是模拟人的点击来操作,所以被反爬的概率将大大降低。该技术也可以和其它技术结合如正则表达式,bs4,request,ip池等。然由于在获取页面的过程中会发送很多请求,所以效率较低,爬取速度会相对慢,建议用于小规模数据爬取。
pip install sqlalchemy
- sqlalchemy是一个python语言实现的的针对关系型数据库的orm库。可用于连接大多数常见的数据库,比如Postges、MySQL、SQLite、Oracle等。
官方介绍链接: https://www.sqlalchemy.org/
pip install pymongo
?????????pymongo模块是python操作mongo数据的第三方模块, conn = MongoClient(‘数据库所在地址’, 端口号) # 表示连接数据库服务器,并创建相应的对象,其中端口号必须是数字。 db_name = conn.tech_stargate # 表示创建想要连接数据库的对象。tech_stargate是想要连接的数据库名 db_name.authenticate(“数据库账号”, “数据库密码”) # 表示连接该数据库。 user = db_name.userModel # 表示创建想要操作的数据库表的对象。 基本操作:
- 增:add = {‘字段名’:‘字段值’,‘字段名1’:‘字段值1’}
user.insert(add) 删:user.remove({‘phoneNo’:‘xxxxx’}) 改:user.update({‘phoneNo’:‘xxxxx’},{‘$set’:{‘想要修改的字段名’:‘对应的值’}}) 查:find():该方法可用来查询数据,不传参表示查询所有数据。也可以传入一个dict作用查询条件,键是字段名,值是具体字段值
pip install gerapy_auto_extractor
- gerapy_auto_extractor是一种不使用XPath或选择器提取列表、标题、内容、日期等信息的提取器,使用这个包来区分列表页和详细信息页,我们可以使用它来提取url从列表页中提取{},datetime,content而不使用任何XPath或选择器。
对于中文新闻网站来说,它比其他场景更有效。对于detail页面,可以使用extract_title方法提取标题,使用extract_content方法提取内容, 使用extract_datetime方法提取日期时间。
pip install gerapy
- Gerapy 是一款分布式爬虫管理框架,有了它我们可以
更方便地控制爬虫运行,更直观地查看爬虫状态 更实时地查看爬取结果,更简单地实现项目部署,更统一地实现主机管理
pip install scrapy==2.6.1
- Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。链接非常不错:
链接:https://segmentfault.com/a/1190000013178839
二、爬虫的流程,代码及结果截图 (按照导入不同数据库分类)
1.Mysql代码
代码如下(示例):
首先导入必要的库和函数,其次输入对应的,mysql数据库相关的账户密码端口,创建的数据库名,表名;再用request发起访问,回馈后利用bs4处理下载的html,整理出想要的结构与内容,最后导入数据库。
mysql结果
2.Pymongo代码
首先导入必要的库和函数,其次输入对应的,mongodb数据库相关的账户密码端口,创建的数据库名,表名,再用request发起访问,回馈后利用bs4处理下载的html,整理出想要的结构与内容,最后导入数据库。
pymongo结果
scarpy爬虫框架流程,代码及结果截图:
总流程
+新建项目 (scrapy startproject xxx): 新建一个新的爬虫项目 +明确目标 (编写items.py): 明确想要抓取的目标 +制作爬虫 (spiders文件夹下/news.py): 制作爬虫爬取网页 +存储内容 (pipelines.py): 设计管道来存储爬取内容
1.前期准备
新建文件夹,右键打开选项命令行
输入pip isntall scrapy==2.6.1
版本尽可能一致;
在命令行中输入scrapy startproject NewsData
# 意思是创建一个叫NewsData的新的scrapy框架
框架文件夹在pycharm中打开;
前期准备完成。
配置
-
Items:设置title/url/content/student-id等列标签 -
Middlewares:添加header等中间件操作 -
Pipelines:管道,配置scrapy与数据库的链接: -
Setting:可以自行配置一些参数;添加浏览器身份,添加MONGODB数仓设置:
以上内容为各种配置操作,如需要一键式的配置代码移步至: https://github.com/amoyiki/LearnedAndProTest/tree/
Spider设计
配置主要的蜘蛛程序:在文件夹spider下创建新的蜘蛛程序:news 导入必要的库和函数
创建url队列,在这里需要提前处理好,否则后面的数据处理非常复杂,所以将url和其他数据写成列表的形式,使用excel和notpad,观察网页结构,最后得到列表。 网页list分析:右键检查网页,得到网页中导航栏的HTML结构,复制元素
notepad++处理:使用插件(tidy2)需要自行下载安装,也可以不用,只是为了excel方便处理
Excel处理url-list:,写成列表格式,[0]为url,[1]为网站名,[2]为网站内各站点
得到url队列:
程序运转从这里开始:
-
Spider(news.py)发送请求url 引擎将url传给调度器,调度器request请求排序入队,request返回结果再传给引擎,使用yield返回结果,参数一定要严格按照下面来写。 -
引擎将返回结果给下载器,下载器按照“下载中间件”的设置,下载request请求 这个下载中间件设置在middlewa这个py文件中 -
下载好后传给引擎。(如果失败,引擎告诉调度器,request下载失败,记录后跳过该request继续执行后面的下载任务 -
引擎将下载好的对象传给Spider文件(我的是news.py),response默认交给def parse()函数处理,最后spider文件会把下载下来的对象按照如下要求变成item数据,并且返回一个新的url请求,给引擎,即将回到第一步 -
引擎将items数据传给管道,管道开始执行相应的操作(写入数据库等操作) -
引擎处理刚才spider发来的请求,然后向调度器发送url相应的request请求进入循环,直到调度器中不存在任何request,重新下载刚才没成功网页后结束整个爬虫。
如果想要更精彩的案例详情请移步:https://segmentfault.com/
三、一点心得
???????最大的收获,我认为便是“自信”,一种可视化的自信。或许一个学期没能见到老师尊容,是我这个学期最大的遗憾吧,杨老师讲课,很有趣,它更像是比我大两三届的学长,在社会中摸爬滚打,回到校园将知识和经验传授予我们。很优秀,也很耐心。学习完爬虫这门课,当我在一次次bug面前绞尽脑汁的搜索和理解,百度,csdn,博客,掘金哈哈哈哈一大堆能查的查完之后我体会到了注释和平时知识积累的意义;当因为权限问题,环境问题,配置问题卸载掉各种软件从头再来时,我感觉到了无比的绝望深刻体会到了严谨的操作和记录是多么重要;当看着眼前cmd运行顺畅的爬虫时,彷佛昨日狼狈的样子过眼云烟,欢快的心绪策马奔腾;很不舍,这门课只有一个学期的课时,如果可以更久,我或许比过去和现在更加自信和从容。 ??????具体学到什么,我想我最骄傲的便是成功的爬取了京东的评论,爬取了每一页有不同结构的科技网,很多结构类似的作文网。虽然前期经历了一次一次的bug,自己不断查找原因,询问老师,过程中也是意外的掌握了浏览器中一个查找xpath好用的拓展插件。最成功的应用便在R语言的结课论文中,我选取了分析京东评论这一方向,需要获取大量的原始评论文本。在爬取京东时不断地查找资料,观看B站额外掌握了一门新的框架技术—selenium,最终也是成功爬取到了八千余条某店铺评论数据。和scrapy不同,scrapy是在客户端的内存解析,只是在内存中的html文档上运行xpath,不需要展开具体的某一网页;selenium是类似于手指触控模拟器一样,帮你去点击操作浏览器,过程中一定会有模仿人行为的操作,因此可以避开很多反爬。可参考链接:三大主流特色 ???????反复打磨,从只会拼凑scrapy,到回归一次一次经验,结合最开始的scrapy流程,清晰的掌握了scrapy各个部分的原理和流程,便令我心旷神怡。本来打算这个收获准备用chatgpt划划水,但想着,这么有意义的事情,怎么能交给冰冷的AI呢。
|