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