当前位置:   article > 正文

python爬虫学习记录_某乎爬

某乎爬

python爬虫学习记录

python下载官网戳这里

爬虫的合法性
几乎每一个网站都有一个名为 robots.txt 的文档,当然也有部分网站没有设定 robots.txt。对于没有设定 robots.txt 的网站可以通过网络爬虫获取没有口令加密的数据,也就是该网站所有页面数据都可以爬取。如果网站有 robots.txt 文档,就要判断是否有禁止访客获取的数据。
我的学习过程:
1.本人有一定的python基础,所以略过了1.python基础知识储备,这部分目前是哪里忘了点哪里。
2.学习了HTML的皮毛,就是知道他大概是什么东西,浅显的会用他,知道css和xpath是啥
3.跟着知乎那个答主的思绪去学习,学到哪里不会,学那里。然后就补充出了各种工具的用法。
4.一边学一边写这篇博客去记录我的学习历程,每次看见这上面的东西变多,就会觉得自己知道的又更多了一点,未知又更多了了一点。
5.这篇文章有许多链接,这些知识是我在浏览器中搜寻发现通俗易懂的宝藏,所以这篇文章,不仅是文章,更是一个收藏集合。

一、基础知识储备

1.python基础知识

  • 1.语法知识
  • 2.文件读写
  • 3.数据存储
  • 4.表的结构设计,增减改
  • 5.正则表达式
  • 6.认识网页结构
    爬虫数据解析方法:正则表达式,css选择器,xpath

2.HTML

学习网址戳这里

① 解释:

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. 字符集:
    ①ASCII字符
    ②汉字
    ③特殊字符:

使用情况:
一、网页中有其特殊意义的字符
二、键盘上没有该字符
使用格式:
字符代码(命名实体):字符代码以“&”符开始,以分号";“结束,其间是字符名
数字代码(编号实体):数字代码也以“&#”符开始,以分号”;"结束,其间是编号

在这里插入图片描述

3.css选择器

1.css(戳我了解更多)
用它来定义 HTML 元素 的样式,是你在HTML之后应该学习的第二门技术。HTML用于定义内容的结构和语义,CSS用于设计风格和布局。

2.css选择器(戳我了解更多)
规定了 CSS 规则会被应用到哪些元素上

4.Xpath选择器

1.xml:
可扩展标记语言,用于标记电子文件使其具有结构性的标记语言(类比HTML语言)
用于数据传出和数据存储,
双标签
html:显示数据
有单标签也有双标签
2.Xpath:
(网页解析器)
为XML路径语言(XML Path Language),它是一种用来确定HTML、XML文档中查找信息的语言,可以对元素和属性进行遍历。
3.parsel
python的HTML、xml解析器,将数据转换为selector对象,具有xpath

二、工具

1.页面下载器

①requests(必学)

安装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' 不是内部或外部命令,也不是可运行的程序或批处理文件。
  • 1
  • 2

2.1.1解决办法
首先找到python 安装目录下面的 Scripts 文件夹,其中有个 pip.exe 的程序,然后把这个目录加到环境变量中去。最后再次打开cmd。

安装目录怎么找:在CMD命令下输入以下代码:

>>>python
>>>import sys
>>>sys.path
  • 1
  • 2
  • 3

目录如何加到环境变量中:
我的计算机》系统属性》高级设置》环境变量》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)
  • 1
  • 2
  • 3
  • 4

如果你能正常,打印,那么说明你至少会运行python脚本,会用pip把requests给装好然后去明白这几行都是什么意思,

这里不会的可以点击目录页面下载器

2.为什么要import这个鬼东西:

个人理解就是因为requests这个库不是python本身自带的,所以需要用import函数,导入库。和import math用法是一致的。

3.import别的行不行:

行,但是后面要用到requests库,依然要import

4.为什么用get方法:

获取数据,请求指定的页面信息,并返回实体主体。

请求url,(URL(Uniform Resoure Locator:统一资源定位器)是WWW页的地址,互联网上用来标识某一处资源的地址。)

5.如何用

需要调用 requests 库中的 get 方法:requests.get

将获取到的数据存到 strhtml变量中,代码如下:strhtml =request.get(url)

这个时候 strhtml 是一个 URL 对象,它代表整个网页,但此时只需要网页中的源码,下面的语句表示网页源码:

strhtml.text

6.能不能用别的

请求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'
  • 1

因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。

因为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.如果要一次性获取很多页面的内容怎么办?

要想读取网页内容,首先要获取网页的 url,但是我们又不能将所有的 url 都输入到程序中,此时就需要我们从已知的 url 中解析出其他的 url,从而不间断的获取新的 url读取新的内容,获取新的 url 可以通过解析含有 href 属性的 a 标签来实现。

10.网络请求等待很慢怎么办?

11.获取到的数据很多,怎么从页面里提取出想要的内容?

为了解决这些问题,你可能要学会怎么分析url,怎么用python的语法把字符串拼起来,再丢到requests.get里面,怎么使用循环,等等很基本的问题学会用线程提高效率,而不是傻傻等待io,你可能慢慢会接触多线程,等等,然后scrapy之类学会用一些html解析的库,bs4,lxml,等等,甚至最基本的用正则re去把内容扣出来为了用这些库,你可能还要学会css的选择器等等然后你又会碰到一些网站直接发请求弄不下来,要学会用浏览器的调试,在network里面看请求,或者用charles抓包等等在请求不下来时你会碰到很多种问题,js渲染后的网页,数据在ajax里面的网页,没有cookies拿不到数据的网页这时候你可能会用到selenium等等东西然后你可能会碰到ip被封的问题,怎么使用代理,怎么买代理,合不合算的问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/855710
推荐阅读
相关标签
  

闽ICP备14008679号