Python爬虫入门
其实把网络爬虫抽象开来看,它无外乎包含如下几个步骤
- 1.模拟请求网页。模拟浏览器,打开目标网站。
- 2.获取数据。打开网站之后,就可以自动化的获取我们所需要的网站数据。
- 3.保存数据。拿到数据之后,需要持久化到本地文件或者数据库等存储设备中。
以此网址https://coolapk.com/apk/为例,爬取前5页的应用信息
一、准备工作
1.导入BeautifulSoup和requests库:
from bs4 import BeautifulSoup
import requests
2.要想获得网页html内容,我们首先需要用requests库的.get()方法向该网页的服务器构造并发送一个请求。requests.get()方法需要传递两个参数,一个是网页的url,在这里显然是https://coolapk.com/apk/;另一个参数是浏览器的header。
点击进入任意一个网页页面,按F12进入开发者模式,点击Network再刷新网页。在Network下的Name中任意点击一个资源,在右侧的Headers版块中下拉到最后,可以看见Request Headers参数列表最后有一个user-agent,其内容就是我们要找的浏览器headers参数值。
有了url和headers我们就可以利用requests.get()向服务器发送请求了:
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/103'}
url = "https://coolapk.com/apk?p="+str(i)
r = requests.get(url, headers = headers) # 发送get请求,得到response对象
注:GET请求是最原始的HTTP请求
POST请求需要提交一个表单
使用requests.get()方法会先构造一个向服务器请求资源的url对象然后从服务器返回一个包含服务器资源的Response对象,其中包含从服务器返回的所有相关资源(自然也包括我们所需的html)。
获取网页的html内容:
html = r.content.decode('utf-8', 'ignore')
解释:这里r.content返回“Content of the response, in bytes.”即返回HTTP响应内容(Response)的字节形式。因此我们需要使用.decode()方法来解码。这里ignore参数可要可不要,仅仅是为了忽略一些不重要的错误。
my_page = BeautifulSoup(html, 'html.parser') # 这里一定要指定解析器,可以使用默认的 html,也可以使用 lxml。
二、开始爬取数据
这里使用select函数
select函数有多种用法:
1、通过标签选择
2、通过类名查找
3、通过id查找
4、通过【属性】查找,当然也适用于class
这里我们通过class来查找
如何确定想要获取的信息的class名称?
1.在页面中右键”检查“,在跳出来窗口的element中可看到页面html
2.选中页面中想要获取信息的地方,右键检查,element中会自动跳到相应的位置,去查找class名称即可
content1=str(my_page.select(".warpper .app_left .app_left_list .list_app_title"))# 获取应用名称
# select函数作用:找到class属性是panel的标签内的class属性是panel-heading的标签内容
for one1 in re.findall(r'le">(.*?)</p>',content1):# 正则表达式筛选信息
print(one1)# 依次输出应用名称
关于BeautifulSoup库还有很多函数,这里只是入门教学,不多展示
完整代码
from bs4 import BeautifulSoup
import requests
import re
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.3161 SLBChan/103'}
i=1
while(i<=5):# 循环获得各分页的信息
url = "https://coolapk.com/apk?p="+str(i)
r = requests.get(url, headers = headers) # 发送get请求,得到response对象
html = r.content.decode('utf-8', 'ignore')# 获取网页信息
my_page = BeautifulSoup(html, 'html.parser') # 解析得到数据
content1=str(my_page.select(".warpper .app_left .app_left_list .list_app_title"))# 获取应用名称
for one1 in re.findall(r'le">(.*?)</p>',content1):# 正则表达式筛选信息
print(one1)# 依次输出应用名称
i+=1