案例分析
爬取图片
[核心处理1]请求地址分析
【网页访问地址就是请求地址 | 抓包工具抓取实际请求地址】
【请求参数分析:观察动态变化的参数<反爬虫操作>】
[熟悉-耗时最多]编写爬虫程序->出错->排查错误->修改代码->错误->---..
编写爬虫程序[easy—使用指定的模块,包装指定的参数,发送请求,接受响应]
符合反爬虫规则 编写代码,解析规则
[核心处理2]分析数据,处理目标数据[数据描述语言]
目标数据:非结构化、结构化
数据描述语言:处理的是结构化的数据~正则、XPATH、css、selector
重点:爬取数据,数据筛选、下载数据[数据清洗]【二进制数据】
爬取段子
重点:爬取数据、数据筛选【文本数据】
核心使用库:
python2:urllib urllib2
python3:urllib.request
第三方模块:requests
正则表达式 VS XPATH
这两个描述语言,都是处理结构化数据的
备注:结构化数据---就是有规则的数据
正则表达式:处理规则比较明确的字符串数据
XPATH:Xml Path 格式的数据
xml:可扩展标记语言:标记内容是用于数据存储和传输
html:超文本标记语言:标记内容用于展示
关于XPATH
<!doctype html>
<html>
<head>
<title>XPATH</title>
</head>
<body>
<div class=”title”>小白的完美世界</div>
<div class=”address”>
<p>有了家,就有了固始</p>
</div>
<div class=”info”>
<span class=”yes”>落霞与孤鹜齐飞,秋水共长天一色</span>
<span class=”no”>我靠,真牛逼</span>
</div>
</body>
</html>
XPATH分析数据的过程
一般情况下,在浏览器中,要进行XPATH的数据分析,得到XPATH表达式---将表达式应用到程序中
浏览器中,怎么使用XPATH来进行数据的分析呢?XPATH HELPER插件【谷歌浏览器】
XPATH在python中的应用
xpath在Python中有一个第三方库,支持~ lxml
注意:不要直接使用pip install lxml去安装~直接安装很容易安装一个空壳!
通过wheel方式安装~wheel是一种文件压缩格式 **.wheel也是一种文件
下载对应的wheel文件【和Python版本对应的】
安装wheel插件
python2 -m pip install wheel
根据下载的本地文件安装lxml:切换到whl文件所在的路径,进行安装
python2 -m pip install lxml-3.8.0-cp27-cp27m-win_amd64.whl
python程序中的操作流程
# 引入需要的库
from lxml import etree
# 爬取数据…得到html数据,保存在变量html中
……
# 将html数据,解析转换成xml数据
xml = etree.HTML(html)
# 使用xpath表达式进行数据描述表达式的应用
data = xml.xpath(“xpath表达式”)
# data就是我们需要的目标数据
使用data
根据代码提示,使用xpath完成【诛仙】小说的下载
# -*- coding:utf-8 -*-
import urllib2
import urllib
from lxml import etree
def getTxt(url,file_name):
print ("开始爬取第%s章的内容" % file_name)
header = {
"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36"
}
request = urllib2.Request(url,headers=header)
response = urllib2.urlopen(request)
content = response.read()
return content
def save_data(content):
xml = etree.HTML(content)
#datas = xml.xpath('/html/body/div[@id="main"]/p | /html/body/div[@id="main"]/h1')
datas = xml.xpath('//*[@id="main"]/h1 | //*[@id="main"]/p')
data = datas[2].xpath('string(.)').encode("utf-8")
name = datas[0].xpath("string(.)")
print ("第%s章的内容爬取完成"% file_name)
with open(name +".txt","wb") as f:
f.write(data)
if __name__ == "__main__":
x = 41277
while x<x+50:
url = "http://www.ty2016.net/net/zhuxian/" + str(x) + ".html"
x+=1
file_name = str(x-41278)
try:
content = getTxt(url,file_name)
save_data(content)
except Exception, a:
print a
结果展示: