爬虫专栏(更新ing)

爬虫

本专题为爬虫小白笔记,使用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
爬虫专栏(更新ing)_第1张图片

第一步:获取页面

import requests #获取网页所需的库

#定义link为目标网页地址
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)  #r.text是获取的网页内容代码

上述代码获取了博客该页的HTML代码。首先import requests, 使用 requests.get ( link, headers=headers) 获取网页。值得注意的是:

(1) 用requests的headers伪装成浏览器访问。

(2) r是requests 的Response 回复对象,我们从中可以获取想要的信息。r.text是获取的网页内容代码。

输出结果为

爬虫专栏(更新ing)_第2张图片

第二步:提取需要的数据

爬虫专栏(更新ing)_第3张图片

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")  #使用BeautifulSoup解析这段代码

#找到文章标题,定位到class是"title-article"的h1元素,提取里面的字符串,strip()去除左右空格
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() 得到文章的标题,并且打印出来。

输出结果:
爬虫专栏(更新ing)_第4张图片

第三步:储存数据

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)

# 打开一个空白的txt,然后使用f.write写入刚刚的字符串title
with open('title_test.txt', "a+") as f:
    f.write(title)

在存储数据中,这里先简单将其放入本地txt文件中

爬虫专栏(更新ing)_第5张图片

第3章 静态网页抓取

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

获取响应内容

在requests中最常用的功能就是获取某网页的内容

爬虫专栏(更新ing)_第6张图片

上例的说明如下:

  • r.text

    是服务器响应的内容,会自动根据响应头部的字符编码进行解码。

  • r.encoding

    是服务器内容使用的文本编码。

  • r.status_ code

    用于检测响应的状态码,如果返回200,就表示请求成功了;如果返回的是 4xx,就表示客户端错误; 返回5xx则表示服务器错误响应。我们可以用r.status_ code 来检测请求是否正确响应。

  • r.content

    是字节方式的响应体,会自动解码gzip 和deflate 编码的响应数据。

  • r.json()

    是 Requests中内置的JSON解码器。

你可能感兴趣的:(Python,爬虫,python)