爬虫
本专题为爬虫小白笔记,使用python编写
第1章 网络爬虫入门
爬虫流程
爬虫流程可简单理解为: 获取网页 + 解析网页(提取数据) + 存储数据
- 获取网页 就是给一个网址发送请求,该网址会返回整个网页的数据。类似于在浏览器中键入网址并按回车键,然后可以看到网站的整个页面。
- 解析网页 就是从整个网页的数据中提取想要的数据。类似于在浏览器中看到网站的整个页面,但是你想找的是产品的价格,价格就是你想要的数据。
- 存储数据 也很容易理解,就是把数据存储下来。我们可以存储在csv中,也可以存储在数据库中。
技术实现
- 获取网页
- 获取网页的基础技术: request、 urllib 和selenium (模拟浏览器)。
- 获取网页的进阶技术: 多进程多线程抓取、登录抓取、突破IP封禁和服务器抓取。
- 解析网页
- 解析网页的基础技术: re 正则表达式、BeautifulSoup 和lxml。
- 解析网页的进阶技术: 解决中文乱码。
- 存储数据
- 存储数据的基础技术: 存入txt文件和存入csv文件。
- 存储数据的进阶技术: 存入MySQL数据库和存入MongoDB数据库。
第2章 编写第一个爬虫
需求:爬取CSDN下面的标题
link为:https://blog.csdn.net/weixin_44553044/article/details/114688122 
第一步:获取页面
import requests
link = "https://blog.csdn.net/weixin_44553044/article/details/114688122"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
print (r.text)
上述代码获取了博客该页的HTML代码。首先import requests, 使用 requests.get ( link, headers=headers) 获取网页。值得注意的是:
(1) 用requests的headers伪装成浏览器访问。
(2) r是requests 的Response 回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。
输出结果为

第二步:提取需要的数据

import requests
from bs4 import BeautifulSoup
link = "https://blog.csdn.net/weixin_44553044/article/details/114688122"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser")
title = soup.find("h1", class_ ="title-article").text.strip()
print (title)
在获取整个页面的HTML代码后,我们需要从整个网页中提取文章的标题。这里用到BeautifulSoup 这个库对爬下来的页面进行解析。
(1) 首先把HTML代码转化为soup 对象
(2) 接下来用soup.find(“hl”, class ="post-title).atext.strip() 得到文章的标题,并且打印出来。
输出结果: 
第三步:储存数据
import requests
from bs4 import BeautifulSoup
link = "https://blog.csdn.net/weixin_44553044/article/details/114688122"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "html.parser")
title = soup.find("h1", class_ ="title-article").text.strip()
print (title)
with open('title_test.txt', "a+") as f:
f.write(title)
在存储数据中,这里先简单将其放入本地txt文件中

第3章 静态网页抓取
? 在网站设计中,纯粹HTML格式的网页通常被称为静态网页,早期的网站一般都是由静态网页制作的。在网络爬虫中,静态网页的数据比较容易获取,因为所有数据都呈现在网页的HTML代码中。相对而言,使用AJAX动态加载网页的数据不一-定会出现在HTML代码中,这就给爬虫增加了困难。本文先从简单的静态网页抓取开始介绍,再介绍动态网页抓取。
获取响应内容
在requests中最常用的功能就是获取某网页的内容

上例的说明如下:
-
r.text 是服务器响应的内容,会自动根据响应头部的字符编码进行解码。 -
r.encoding 是服务器内容使用的文本编码。 -
r.status_ code 用于检测响应的状态码,如果返回200,就表示请求成功了;如果返回的是 4xx,就表示客户端错误; 返回5xx则表示服务器错误响应。我们可以用r.status_ code 来检测请求是否正确响应。 -
r.content 是字节方式的响应体,会自动解码gzip 和deflate 编码的响应数据。 -
r.json() 是 Requests中内置的JSON解码器。
|