爬虫学习

自学爬虫笔记

一.基础知识学习:

1.re正则

贪婪模式:尽可能多的匹配

懒惰模式:尽可能少的匹配,精准模式

*?

+?

模式修正符:在不改变正则表达式的情况下通过模式修正符是匹配结果发生更改

修正符 含义
re.S 让. 也可以匹配多行
re.I 让匹配时忽略大小写

2.XPath表达式

表达式 含义
/ 逐层提取
text() 提取标签下面的文本
//标签名[@属性='属性值'] 提取属性为XX(属性值)的标签
@属性名 代表取某个属性值

二.urllib - 爬网页

1.导包

import urllib.request
import re 
url="想要爬取的网页地址"
# 爬取到内存中去
data=urllib.request.urlopen(url).read().decode("utf-8","ignore")

# 分析代码:
# 首先urllib.request.urlopen(url)是通过模块打开连接网页,read()读取数据,decode("utf-8","ignore")防止内容出错进行解码,ignore参数是为避免在出现小问题的时候继续进行
len(data)    # 获取数据长度,看是否有数据
pat="(.*?)"     # 设定正则表达式
rst=re.compile(pat,re.S).findall(data)     # 全局匹配

# 将网页爬取到硬盘上的文件中
urllib.request.urlretrieve(url,filename="")

2.浏览器伪装

有些时候网站会禁止你去爬取信息,但是你还可以浏览网页,那就说明并不是封了你的ip,此时你需要将自己伪装成浏览器进行爬取

3.爬取方式

目前我只知道三种,后续再加:

1.直接爬取,用urlopen

2.浏览器伪装爬取,需要用到opener

3.用户代理池浏览器伪装和2几乎一致,不同就是,将多个浏览器的user-agent放到一个列表中去

4.抓包分析

这一步是爬虫的重点也是难点,在爬虫来时的时候我们需要明确我们想要爬取什么信息

然后:

1.查看网址,查看网址的变化(简化网址,去掉无用参数仍可以定位到)

2.分析数据,查看数据中的关键字(可以查看网站源码)

5.抓包工具

fiddler----》相当于代理服务器

抓包原理:用户将信息---提交--->fiddler--->浏览器---响应--->fiddler---回馈--->用户

默认地址:127.0.0.1

默认端口:8888

如果在配置fiddler时HTTPS出现变成灰锁的情况,参考-------------

https://weibo.com/ttarticle/p/show?id=2309404103263770292716

常用命令:

命令 含义
clear 清空

三.Requests模块

1.简介与基础:

我们除了使用Urllib模块编写爬虫之外,还有很多可以选择的模块。其实,Requests模块就是另一个非常常用的模块,除此之外,后续我们还会为大家介绍Scrapy框架。这些不同的技术手段都可以实现同样的爬虫功能,具体选择那种技术手段大家可以根据爱好选择,但在此我们会分别为大家介这些常见的技术手段的使用。另外,爬虫的难点不在于技术手段本身,而在于网页分析与反爬攻克,这些我们都会逐渐介绍。

接下来我们首先为大家介绍Requests模块的基础使用。

2.requests请求方式:get,post,but...

常用的是:get

其中的参数:

参数 含义
params 一般放get请求的参数,以字典的方式存储
headers 如果要伪装浏览器,需要用到headers,主要用于添加头信息,同样以字典的方式存储
proxies 添加代理,同样以字典的方式存储,所以可以放置代理ip到里面 key值就是协议名,values 就是代理ip
cookies 添加cookies到里面,
data 如果使用post发数据时,可以使用data将数据发过去,data存储post需发送的数据

3.响应

在得到响应之后,也可以用一些属性来获得一些相应信息

属性 含义
text 代表对应请求响应的数据decode之后的
content 响应的数据 二进制类型的流数据
encoding 当前网页编码
cookies 当前网页的cookies
url 得到当前响应的url
status_code 状态码

​ 4.参数和属性的使用

rst=requests.get("http://www.aliwx.com.cn/")

# rst只是当前的一个响应    那如果相当到其中的信息则需要用到text属性,即响应数据
title=re.compile("(.*?)",re.S).findall(rst.text)

# 如果想伪装浏览器则需要用到headers
# headers可以以字典的形式写入各种头信息:

# 例如:
hd = {"user-agent":"对应数据"}
rst=requests.get("http://www.aliwx.com.cn/",headers=hd)

# 将cookies转为正常字典的形式:
requests.utils.dict_from_cookiejar(rst.cookies)

爬取练习:爬取云栖社区博客

# -*- coding: utf-8 -*-
"""
# @Author    :   MHQ
# @Project   :   Crawl _practice
# @File      :   requests_yunxi.py
# @Function  :   爬取云栖博客文章
# @Time      :   2020/2/10 18:32
"""
import requests
import re
import time
import urllib3

urllib3.disable_warnings()
key="Python"
url="https://yq.aliyun.com/search/articles/"
# try:
# data=requests.get(url,params={"q":key},verify=False).text
data=requests.get(url,verify=False).text
pat1='
找到(.*?)条关于' allline=re.compile(pat1,re.S).findall(data)[0] # print(allline) allpage=int(allline)//15+1 for i in range(0,int(allpage)): print("----正在爬第"+str(i+1)+"页----") index=str(i+1) getdata={"q":key, "p":index, } # data=requests.get(url,params=getdata,verify=False).text data = requests.get(url, verify=False).text pat_url='

四.Scrapy学习

1.Scrapy模块的安装

Scrapy模块是一个非常常用的爬虫框架,使用Scrapy可以快速创建爬虫项目。要使用Scrapy,首先需要安装Scrapy,接下来为大家介绍安装方式。

建议安装顺序:

尽量在网络好的情况下安装:
1.首先,升级pip: python -m pip install --upgrade pip
2.安装wheel
3.安装lxml
4.安装Twisted
5.pip install scrapy或pip install scrapy==1.1.0rc3
6.下载安装pywin32并配置
# 注意:如果在dos环境下安装失败,可以选择下载包之后再安装,下载相应包的地址是:lfd python(https://www.lfd.uci.edu/~gohlke/pythonlibs/)

# 第6步的配置需要把Python37--->Lib--->site-packages--->pywin32_system32中的两个dll文件放到C:\Windows\System32中

2.Scrapy指令学习

Scrapy 一般通过指令管理项目,常用的指令有:

指令 含义
startproject 创建爬虫项目
genspider -l 查看爬虫模板
genspider -t 模板 爬虫文件名 域名 创建爬虫
crawl 运行爬虫
list 查看有哪些爬虫

可以单独创建个文件夹进行爬虫练习

创建指令为:scrapy startproject 项目名

例:scrapy startproject ali_first

这项目下回有两个文件:
一个是ali_first文件夹 这是个核心文件夹
另一个是scrapy.cfg 这是一个配置文件

进入ali_first之后会有:

__init__.py   初始化文件
items.py    用于定义目标的,你想要的爬取什么信息,统统可以在这中定义好,比如说爬标题,文章内容什么的
middlewares.py   中间件 在中间处理相应的东西
pipelines.py   爬后处理  比如写入数据库等等
settings.py   做整个项目的总体配置 设置信息
进入爬虫项目 cd ali_first
然后scrapy genspider -l 

创建爬虫项目之后会有四个爬虫模板:(很多项目都是基于模板创建的)

模板名 含义
basic 基础模板
crawl 通用爬虫模板
csvfeed 爬取csv格式的数据
xmlfeed 爬取xml形式的数据
# 创建模板:(例:基于basic创建,最后哪一个是想要的模板名,然后另外的是域名)
scrapy genspider -t basic fst aliwx.com.cn

# 运行 
scrapy crawl fst

# 查看当前有哪些可用的爬虫文件:
scrapy list

# 查看scrapy指令可以直接输入:
scrapy


编写一个Scrapy爬虫项目,一般按照如下流程进行:
1.创建爬虫项目
2.编写items
3.创建爬虫文件
4.编写爬虫文件
5.编写pipelines  (可有可无吧)
6.配置settings

你可能感兴趣的:(爬虫学习)