认识爬虫
以下的学习都基于一个博主的练习,我就跟着他一起学习练习,这篇博客只是依然记录一下自己的学习历程(😀)加油💪
这是这位博主的原博客,可以学习看看
这是另外一位博主,更入门更详细一些
首先先认识爬虫这个概念,首先学会基本的Python语法知识、学习Python爬虫常用到的几个重要内置库urllib, http等,用于下载网页、学习正则表达式re、BeautifulSoup(bs4)、Xpath(lxml)等网页解析工具、开始一些简单的网站爬取,了解爬取数据过程、了解爬虫的一些反爬机制,header,robot,时间间隔,代理ip,隐含字段等、学习一些特殊网站的爬取,解决登录、Cookie、动态网页等问题、了解爬虫与数据库的结合,如何将爬取数据进行储存、学习应用Python的多线程、多进程进行爬取,提高爬虫效率、学习爬虫的框架,Scrapy、PySpider等、学习分布式爬虫(数据量庞大的需求)
爬虫的过程
在键盘上输入网址点击搜索之后,通过网络经过DNS服务器分析域名,找到真正的服务器。然后通过HTTP协议对服务器发出GET或POST请求,若请求成功就得到了网页,一般都是用HTML, CSS, JS等前端技术来构建的,若请求不成功,服务器返回请求失败的状态码,常见到的503,403等。爬虫通过对服务器发出请求得到HTML网页,然后对下载的网页进行解析,得到我们想要的内容。
urllib
这个库是python内置的,在Python的urllib库中doc开头是这样简短描述的:
- Error:“Exception classesraised by urllib.”----就是由urllib举出的exception类
- Parse:“Parse (absolute andrelative) URLs.”----解析绝对和相对的URLs
- Request:“An extensiblelibrary for opening URLs using a variety of protocols”用各种协议打开URLs的一个扩展库
- Response:“Response classesused by urllib.”----被urllib使用的response类
刚开始先试试request的使用,request请求最简单的操作是用urlopen方法,代码如下:
import urllib.request
response = urllib.request.urlopen('http://python.org/')
result = response.read()
print(result)
运行结果编码出现问题:
一般这种情况把编码改成常见的UTF-8就可以了。
import urllib.request
response = urllib.request.urlopen('http://python.org/')
result = response.read().decode('utf-8')
print(result)
结果很长:
现在来学一下urlopen,urlopen是request的其中一个方法,功能是打开一个网址,URL参数可以是一串字符串(如上例子中一样),也可以是Request对象。
- url:即输入的url网址,(如:http://www.xxxx.com/);
- data:发给服务器请求的额外信息(比如登录网页需要主动填写的用户信息)。如果需要添加data参数,那么是POST请求,默认无data参数时,就是GET请求;一般来讲,data参数只有在http协议下请求才有意义data参数被规定为byte object,也就是字节对象。data参数应该使用标准的结构,这个需要使用urllib.parse.urlencode()将data进行转换,一般把data设置成字典格式再进行转换即可
- timeout:是选填的内容,定义超时时间,单位是秒,防止请求时间过长,不填就是默认的时间;
- cafile:是指向单独文件的,包含了一系列的CA认证 (很少使用,默认即可);
- capath:是指向文档目标,也是用于CA认证(很少使用,默认即可);
- cafile:可以忽略
- context:设置SSL加密传输(很少使用,默认即可)
- geturl(): 返回URL,用于看是否有重定向。
- info():返回元信息,例如HTTP的headers。
- getcode():返回回复的HTTP状态码,成功是200,失败可能是503等,可以用来检查代理IP的可使用性。
def urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TI
MEOUT,*, cafile=None, capath=None,
cadefault=False, context=None):
- url,data和上面urlopen中的提到的一样。
- headers是HTTP请求的报文信息,如User_Agent参数等,它可以让爬虫伪装成浏览器而不被服务器发现你正在使用爬虫。
- origin_reg_host, unverifiable, method等不太常用。origin_reg_host指的是原产地注册主机。
2021/6/28