爬虫|python爬虫学习记录
python爬虫学习记录 python下载官网戳这里
爬虫的合法性
几乎每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据。
我的学习过程:
1.本人有一定的python基础,所以略过了1.python基础知识储备,这部分目前是哪里忘了点哪里。
2.学习了HTML的皮毛,就是知道他大概是什么东西,浅显的会用他,知道css和xpath是啥
3.跟着知乎那个答主的思绪去学习,学到哪里不会,学那里。然后就补充出了各种工具的用法。
4.一边学一边写这篇博客去记录我的学习历程,每次看见这上面的东西变多,就会觉得自己知道的又更多了一点,未知又更多了了一点。
5.这篇文章有许多链接,这些知识是我在浏览器中搜寻发现通俗易懂的宝藏,所以这篇文章,不仅是文章,更是一个收藏集合。
文章目录
- python爬虫学习记录
- 一、基础知识储备
-
- 1.python基础知识
- 2.HTML
- ① 解释:
- ②编辑器:
- 3.css选择器
- 4.Xpath选择器
- 二、工具
-
- 1.页面下载器
- **①requests(必学)**
- ②scrapy
- 2.页面解析器
- ①BeautifulSoup(入门级)
- ②pyquery (类似jQuery)
- ③lxml
- ④parsel
- ⑤scrapy的Selector (强烈推荐, 比较高级的封装,基于parsel)
- ⑥正则表达式
- 3.数据存储
- 三、学习过程
-
- 1.爬虫原理:
- 2. Python 爬虫学习思路:
- ①
- **1.了解网页;**
- **2.使用 requests 库抓取网站数据;**
- **3.使用 Beautiful Soup 解析网页;**
- 4.清洗和组织数据;
- 5.爬虫攻防战;
- ②
- 1.从代码开始
- 2.为什么要import这个鬼东西:
- 3.import别的行不行:
- 4.为什么用get方法:
- 5.如何用
- 6.能不能用别的
- ①HEAD
- ②POST
- 7.把百度换成你想爬的地址
- 8.为什么要用utf-8
- ①ASCII编码:
- ②拓展ASCII编码:
- ③Unicode编码:
- ④utf-8:
- ⑤GBK和GB2312和GB18030:
- 什么时候用
- **什么时候可以不用,什么时候可能还要换成别的,**
- gb2312print是干嘛的
- 9.如果要一次性获取很多页面的内容怎么办?
- 10.网络请求等待很慢怎么办?
- 11.获取到的数据很多,怎么从页面里提取出想要的内容?
一、基础知识储备 1.python基础知识
- 1.语法知识
- 2.文件读写
- 3.数据存储
- 4.表的结构设计,增减改
- 5.正则表达式
- 6.认识网页结构
① 解释:
HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。
HTML 是整个网页的结构,相当于整个网站的框架。带“<”、“>”符号的都是属于 HTML 的标签,并且标签都是成对出现的。站点:
新建一个文件夹,在这个新建的文件夹中包含了我们设计的网页中所需要的、所用到的所有文件,我们可以通过创建它来对我们进行的网页进行管理,并且在我们进行网页的编辑和设计时,方便我们浏览,有次序的找到指定文件,点开管理站点,还可以对其素材文件一目了然,大大减少了我们的工作量。②编辑器: HTML其实是文本,它需要浏览器的解释,它的编辑器大体可以分为以下几种:
一、基本文本、文档编辑软件,使用微软自带的记事本或写字板都可以编写,当然,如果你用WPS或Word来编写也可以,不过保存时请使用.htm或.html作为扩展名,这样就方便浏览器认出直接解释执行了。
二、半所见即所得软件,如:FCK-Editer、E-webediter等在线网页编辑器;尤其推荐:Sublime Text代码编辑器(由Jon Skinner开发,Sublime Text2收费但可以无限期试用)。
三、所见即所得软件,使用最广泛的编辑器,完全可以一点不懂HTML的知识就可以做出网页,如:AMAYA,FRONTPAGE,Dreamweaver,Microsoft Visual Studio
其中所见即所得软件与半所见即所得的软件相比,开发速度更快,效率更高,且直观的表现更强。任何地方进行修改只需要刷新即可显示。缺点是生成的代码结构复杂,不利于大型网站的多人协作和精准定位等高级功能的实现。
- 字符集:
①ASCII字符
②汉字
③特殊字符:
使用情况:
一、网页中有其特殊意义的字符
二、键盘上没有该字符
使用格式:
字符代码(命名实体):字符代码以“&”符开始,以分号"; “结束,其间是字符名
数字代码(编号实体):数字代码也以“”符开始,以分号”; "结束,其间是编号
文章图片
3.css选择器 1.css(戳我了解更多):
用它来定义 HTML 元素 的样式,是你在HTML之后应该学习的第二门技术。HTML用于定义内容的结构和语义,CSS用于设计风格和布局。
2.css选择器(戳我了解更多):
规定了 CSS 规则会被应用到哪些元素上
4.Xpath选择器 1.xml:
可扩展标记语言,用于标记电子文件使其具有结构性的标记语言(类比HTML语言)
1.Xpath:
为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言
二、工具 1.页面下载器 ①requests(必学) 安装request真的是血与泪的经历,python能更新还是尽早更新,因为pip是3.4以上版本才带有,虽然本人版本是3.8但多少还是一波三折,终于得到了requests。废话不多说,上过程。
2021.9.25,我更新了python,自我分析了一波:1.检查自己是否有pip。3.4以上都有。
我3.8的版本在c盘,但是3.9被安在了d盘,文件转移,路径改变导致新版本的pip根本不能用,最后删除3.9版本根本删不了,修复了,然后先删除文件,再删除软件,最后成功卸载了3.9,but,安装包也搞丢了,于是乎,与官网奋战,再次下载新版本。
更新后的感受:
pip居然不是最新的版本,那我只好,,,,,更新pip,然后发现,新版本,巨好用,贼拉爽。
2.打开cmd,输入
pip install requests
2.1若出现如下情况
C:\Users\Administrator>pip
'pip' 不是内部或外部命令,也不是可运行的程序或批处理文件。
2.1.1解决办法
首先找到python 安装目录下面的 Scripts 文件夹,其中有个 pip.exe 的程序,然后把这个目录加到环境变量中去。最后再次打开cmd。
安装目录怎么找:在CMD命令下输入以下代码:
>>>python
>>>import sys
>>>sys.path
目录如何加到环境变量中:
我的计算机》系统属性》高级设置》环境变量》path
看图戳这里
3.requests介绍:
python的第三方库,
**
②scrapy **
3.selenium+chrome + PhantomJS(抓取动态网页,不推荐)
4.Splash(抓取动态网页,推荐)
对于下载器而言,python自带的urllib就不要花时间去学了,学了就忘,直接requests能满足大部分测试+抓取需求,进阶工程化scrapy,动态网页优先找API接口,如果有简单加密就破解,实在困难就使用splash渲染
2.页面解析器 解析页面
①BeautifulSoup(入门级) ②pyquery (类似jQuery) ③lxml ④parsel ⑤scrapy的Selector (强烈推荐, 比较高级的封装,基于parsel) ⑥正则表达式 3.数据存储 1.txt文本
2.csv文件
3.sqlite3 (python自带)
4.MySQL
5.MongoDB
按照业务需求来就行,一般快速测试使用MongoDB,业务使用MySQL
三、学习过程 1.爬虫原理: 发送请求——获得页面——解析页面——下载内容——储存内容
2. Python 爬虫学习思路: ① 1.了解网页;
网页一般由三部分组成,分别是 HTML(超文本标记语言)、CSS(层叠样式表)和 JScript(活动脚本语言)2.使用 requests 库抓取网站数据;
通过 requests 库已经可以抓到网页源码,接下来要从源码中找到并提取数据。3.使用 Beautiful Soup 解析网页;
Beautiful Soup 是 python 的一个库,其最主要的功能是从网页中抓取数据。Beautiful Soup 目前已经被移植到 bs4 库中,也就是说在导入 Beautiful Soup 时需要先安装 bs4 库。4.清洗和组织数据; 5.爬虫攻防战;
作者:简单交易的狐狸② 某乎的回答,以下是本人的解答,如有不对,请斧正
链接:https://www.zhihu.com/question/304686270/answer/545761703
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1.从代码开始
`import requests
strhtml=requests.get("http://www.baidu.com")
strhtml.encoding='utf-8'
print(strhtml.text)
如果你能正常,打印,那么说明你至少会运行python脚本,会用pip把requests给装好然后去明白这几行都是什么意思,
这里不会的可以点击目录页面下载器2.为什么要import这个鬼东西:
个人理解就是因为requests这个库不是python本身自带的,所以需要用import函数,导入库。和import math用法是一致的。3.import别的行不行:
行,但是后面要用到requests库,依然要import4.为什么用get方法:
获取数据,请求指定的页面信息,并返回实体主体。
请求url,(URL(Uniform Resoure Locator:统一资源定位器)是WWW页的地址,互联网上用来标识某一处资源的地址。)5.如何用
需要调用 requests 库中的 get 方法:requests.get
将获取到的数据存到 strhtml变量中,代码如下:strhtml =request.get(url)
这个时候 strhtml 是一个 URL 对象,它代表整个网页,但此时只需要网页中的源码,下面的语句表示网页源码:6.能不能用别的
strhtml.text
请求URL:http篇:post,get,options,put,delete,trace,connect①HEAD
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头②POST (跟着post走,用f12把我的有道翻译页面搞没有了,救救我,救救我2021.09.24)》》》就是这个神奇的东西,救救我,救救我
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
③
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的页面。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断。7.把百度换成你想爬的地址
换成网易云,爬了一大堆。看看能不能奏效:fine
8.为什么要用utf-8
strhtml.encoding='utf-8'
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。因为utf-8编码的可变长,一会儿一个字符串是占用一个字节,一会儿一个字符串占用两个字节,还有的占用三个及以上的字节,导致在内存中或者程序中变得不好琢磨。unicode编码虽然占用内存空间,但是在编程过程中或者在内存处理的时候会比utf-8编码更为简单,因为它始终保持一样的长度一样的长度对于内存和代码来说,它的处理就会变得更加简单。
eg:Unicode、ASCII、GBK、GB2312、UTF-8。
原由:ASCII》》ASCII拓展》》Unicode符号集》》UTF-8/GBK和GB2312①ASCII编码:
用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符。②拓展ASCII编码: 用于表示更多的欧洲文字,用8个位存储数据,一共可以表示256个字符
③Unicode编码: 包含世界上所有的字符,是一个字符集。
字符串在Python内部的表示是 unicode编码因此,在转换时,通常需要以unicode作为中间编码
先将其他编码的字符串解码:decode成unicode,
再从unicode编码:encode成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode(‘gb2312’),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode(‘gb2312’),表示将unicode编码的字符串str2转换成gb2312编码。
转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码④utf-8: 字符编码方式的一种,它是一种变长的编码方式。是Unicode字符的实现方式之一,它使用1-4个字符表示一个符号,根据不同的符号而变化字节长度。
⑤GBK和GB2312和GB18030:
都是针对简体字的编码,只是GB2312只支持六千多个汉字的编码,而GBK支持1万多个汉字编码。而GB18030是用于繁体字的编码。汉字存储时都使用两个字节来储存。GBK/GB2312/GB18030:表示汉字。GBK/GB2312表示简体中文,GB18030表示繁体中文。什么时候用
主要针对的是Windows系统。所以涉及到Windows系统或者跨系统文件读写最好都加上,跟你的运行环境有关,因为默认编码不是utf-8
在做网络传输和文件保存的时候,出于空间和传输效率的考虑,将unicode编码转换成utf-8编码什么时候可以不用,什么时候可能还要换成别的,
当从文件中读取数据到内存中的时候,将utf-8编码转换为unicode编码。gb2312print是干嘛的 ,
数据只在res.text里面吗
用dir(res)看看它都有什么属性,打印res.content会如何以上都完成,你至少会明白,简单的爬虫不过是向一个url发送http请求,然后再它返回的数据里面拿到你想要的内容,这跟你用浏览器打开一个网页没有什么区别,只不过程序代你完成了。
9.如果要一次性获取很多页面的内容怎么办? 10.网络请求等待很慢怎么办? 11.获取到的数据很多,怎么从页面里提取出想要的内容? 【爬虫|python爬虫学习记录】为了解决这些问题,你可能要学会怎么分析url,怎么用python的语法把字符串拼起来,再丢到requests.get里面,怎么使用循环,等等很基本的问题学会用线程提高效率,而不是傻傻等待io,你可能慢慢会接触多线程,等等,然后scrapy之类学会用一些html解析的库,bs4,lxml,等等,甚至最基本的用正则re去把内容扣出来为了用这些库,你可能还要学会css的选择器等等然后你又会碰到一些网站直接发请求弄不下来,要学会用浏览器的调试,在network里面看请求,或者用charles抓包等等在请求不下来时你会碰到很多种问题,js渲染后的网页,数据在ajax里面的网页,没有cookies拿不到数据的网页这时候你可能会用到selenium等等东西然后你可能会碰到ip被封的问题,怎么使用代理,怎么买代理,合不合算的问题
推荐阅读
- 由浅入深理解AOP
- 继续努力,自主学习家庭Day135(20181015)
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 一起来学习C语言的字符串转换函数
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- 定制一套英文学习方案
- 漫画初学者如何学习漫画背景的透视画法(这篇教程请收藏好了!)
- 《深度倾听》第5天──「RIA学习力」便签输出第16期