Python爬虫之爬虫原理并实现第一个爬虫

主要知识点:

           网络连接:

                   根据图2.1我们可以知道计算器通过向服务器发送Request请求,可以得到相应的Response。其中Request包括请求头和消息体,Response包括html文件。其实计算机的一次Request请求和服务器的一次应答就是网络连接的体现。

                  其中我们可以把计算机比作向商店购买产品的消费者,当消费者去商店购买产品离开时,他应该给结账员自己所购买的商品的硬币,其中硬币可类比于请求头,商品可类似于消息体。而结账员就相当于服务器。经过结账源处理后,消费者可以得到所购买的产品,即Response。

                 request和response详解

 

 

 

 

           爬虫原理:

                 通过对网络连接的简单了解,我们可以归纳出爬虫就是模拟计算机对服务器发起Request请求,得到服务器端的Request内容并解析提取对自己有用的信息。由于互联网错综复杂,一次简单的模拟网络连接不能批量的获取网页数据。因此就出现了多页面和跨页面爬虫流程。

1.多页面网页爬虫流程

有的网页存在多页的情况时,每个网页结构都相同或者类似,这种类型的网页爬虫流程为:

1.手动翻页并观察各页面的的URL构成特变,构造出所有页面的URL存入列表

2.根据URL列表依次循环取出URL。

3.定义爬虫函数。

4.循环调用爬虫函数,存储数据

5.循环完毕,结束爬虫。

2.跨页面爬虫流程

 

 

 

跨页面的爬虫流程:

1.定义爬取函数爬取列表页的所有专题的URL

2.将专题URL存入列表中。

3.定义爬取详细页数据函数

4.进入专题详细页面爬取详细函数。

5.存储数据,循环完毕,结束爬虫。

 

爬虫的任务就是两件事:请求网页和解析提取信息

爬虫三大库 Requests Lxml BeautifulSoup

Requests库:请求网站获取网页数据

import requests
#from bs4 import BeautifulSoup
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"}
res=requests.get("http://bj.xiaozhu.com/",headers=headers)
#soup = BeautifulSoup(res.text, 'html.parser')
try:
    #price=soup.select("#page_list > ul > li > div.result_btm_con.lodgeunitname > div > span > i")
    print(res)
    print(res.text)
    #print(soup.prettify())
    #print(price)
except ConnectionError:
    print("拒绝连接")

其中<Response [200]>表示请求网页成功

User-Agent可以通过http://www.user-agent.cn/ 查看

请求头

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"}

为get()方法加入请求头

res=requests.get("http://bj.xiaozhu.com/",headers=headers)

post()方法用于提交表单来爬取需要登录才能获得数据的网站

BeautifulSoup库:轻松的解析Requests库请求的网页,并把网页源码解析为Soup文档,以便过滤提取数据

import requests
from bs4 import BeautifulSoup
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"}
res=requests.get("http://bj.xiaozhu.com/",headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
print(soup.prettify())

BeautifulSoup库主要解析器的优缺点

Soup文档可以使用find() find_all() selector()定位需要的元素

Soup文档

例子

import requests
from bs4 import BeautifulSoup
headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3704.400 QQBrowser/10.4.3587.400"}
res=requests.get("http://bj.xiaozhu.com/",headers=headers)
soup = BeautifulSoup(res.text, 'html.parser')
try:
    price=soup.select("#page_list > ul > li > div.result_btm_con.lodgeunitname > div > span > i")
    #print(res)
    #print(res.text)
    #print(soup.prettify())
    print(price)
except ConnectionError:
    print("拒绝连接")

其中li:nth-child(1)在Python运行时会报错需要改为 li:nth-of-type(1).

也可以使用 get_text()方法获取中间的文字消息。

 

欢迎进群交流

                                                    

 

 

 

 

           

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值