爬虫技术 课1
2020-07-14 04:29
344 查看
爬虫技术初级课
文章目录
tips:注释快捷键 ctrl+/
注释 # ‘’’……’’’
开发者工具快捷键 F12
1 原理
1.1 概念
收集互联网数据的工具,自动下载网页的计算机程序或自动化脚本
1.2 爬虫工作原理
步骤 | 备注 |
---|---|
1.请求网页 | 客户端向网页服务器发送请求(url) |
2.服务器响应 | HTTP的请求过程: 用网页开发者工具,去查看请求到的响应信息 url:客户端向服务器发送请求,用到的统一资源定位符(网址) 请求模式:get, post |
3.解析获取的内容 | HTML的技术: CSS皮肤 JavaScript肌肉 html骨架 |
4.将解析到的内容保存到本地,进行数据分析 | 技术:json, csv, excel,mysql |
2 基础概念
2.1 常用库
使用方法 | 库 |
---|---|
1.请求网页,响应网页内容时,常用的python库 | urllib,request, selenium(模拟浏览器),scrapy框架 |
2.解析网页的库 | 正则,lxml(XPath),BeautifulSoup(bs4),pyquery |
3.保存到本地 | python中保存信息的地方 |
2.1.1 request库
请求网页库
import request request.get(url,headers=ua)
查看网页状态的属性:res_v2 = status_code
网页源码:res_v2.content
2.1.2 解析库 BeautifulSoup
from bs4 import BeautifulSoup
2.2 技术介绍
2.2.1 HTTP:
请求模式:get,post区别
get会将请求的内容显示在url中,post不会显示,post是以表单形式提交的信息
get最多提交1024kb的内容,post无大小限制
请求时,一般需给服务器提交的内容
User-Agent: 浏览器信息
tips:爬虫时,提交User-Agent,就可以模拟浏览器访问,否则会被识别为爬虫,可能被反爬虫
常见User-Agent大全
cookies机制:网站为了辨别用户身份,进行会话跟踪而存储在用户本地终端上的数据
服务器响应的状态码:
常用状态码 | 含义 |
---|---|
200 | 请求成功 |
400 | 语法错误 |
403 | 服务器拒接您的请求 |
404 | 请求失败,服务器没有该资源 |
500 | 服务器内容错误 |
503 | 服务器目前无法使用 |
2.2.2 HTML
3 实例
Case1:请求网页
import urllib3 url = "http://www.163.com" #要请求的网址 http = urllib3.PoolManager() #声明一个urllib3的请求对象 ua = {"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36"} respone_vl = http.request('Get',url,headers=ua)#请求语句 print("服务器响应的状态码:",respone_vl.status) # print("服务器响应的内容:",respone_vl.data) # respone_vl.encoding = 'utf-8'#改变编码方式 print(respone_vl.data.decode("gbk")) #转换编码
Case2:解析网页
xpath库
#2.解析网页内容 from lxml import etree #解析库1 #将网页转化为xpath能够解析的格式 etree_html = etree.HTML(html,parser = etree.HTMLParser(encoding='utf-8')) #修正转换后的HTML格式 # result = etree.tostring(etree_html,encoding='utf-8',pretty_print=True) # print(result.decode('utf-8')) title = etree_html.xpath('//title/text()')#用xpath取网站标题 print(title) meta = etree_html.xpath("//ul[@class='navbar']/li/a/text()") print(meta)
- 转换请求内容为xpath库能解析的格式
- 补全网页格式(因为在1.中,可能会出现丢失网页标记的情况,因此需要补全)
- xpath提取网页内容的表达式
表达式 | |
---|---|
nodename | 选取nodename 的所有子节点 |
nodename |
第n个元素 |
/ | 从当前节点 |
// | 从当前节点选取所有子孙节点 |
. | 选取当前节点 |
@ | 选取属性 |
4.text()选取当前节点的文本
5.HTML的标记,提取频率较高的标记有:
a | 超链接 文本,网址 |
div | |
p | 文字标记 |
span | |
ul | |
li |
常用属性:
id属性:一般用于定位一个值时(因为网页中的id是不重复的)
class属性:一般用于定位批量值时(网页中的class属性是可以重复的)
开发者工具的使用:
elements :面板
network :面板
application
6.提取元素路径,右键单击-Copy-xpath
3 静态网页的爬取
函数化爬虫
#爬取古诗文网站的信息 import urllib3 import chardet from lxml import etree #函数1:请求网站函数 def page_def(url): http = urllib3.PoolManager() #声明一个urllib3的请求对象 ua = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"} res_v1 = http.request('GET',url,headers=ua) #请求语句 code_info = chardet.detect(res_v1.data) #自动识别网页编码,返回一个字典,其中的encoding键,对应的是编码 html= res_v1.data.decode(code_info["encoding"]) #用上面识别到的编码修改网页格式 return (html,code_info) #函数2:转换为可以解析的网页格式函数 def xpath_def(html): et_html = etree.HTML(html[0],parser = etree.HTMLParser(encoding=html[1]['encoding'])) etree.tostring(et_html,encoding=html[1]['encoding'],pretty_print=True) #格式修正 return et_html #函数3:解析元素 def elem_def(et_html): title = et_html.xpath('//title/text()') ele_info = title return ele_info #函数4:保存信息函数 def save_def(): pass #主函数 def main(): url = "https://www.gushiwen.org/" url1 = 'http://www.sina.com.cn' page_info = page_def(url1) #调用函数1 et_html = xpath_def(page_info) #调用函数2 ele_info = elem_def(et_html) print(ele_info) #函数入口 if __name__ == "__main__": main()
4 动态网页的爬取
图片库
(未完待续)
相关文章推荐
- 大快搜索数据爬虫技术实例安装教学篇
- 爬虫技术研究综述
- 网络爬虫技术快速入门
- 爬虫技术分享
- 搜索引擎中的爬虫和倒排索引技术
- python爬虫之验证码篇3-滑动验证码识别技术
- 爬虫抓取技术
- java技术简易的网站爬虫
- 对爬虫技术的理解--Crawler
- 网络爬虫技术
- 爬虫进阶:反反爬虫技术--1User-Agent伪装,构造合理的 HTTP 请求头
- 网络爬虫技术浅析
- python简单爬虫技术
- 分布式网络爬虫关键技术分析与实现一网络爬虫相关知识介绍
- 分享我从事数据采集 爬虫大数据挖掘 网络爬虫的技术经历
- 爬虫技术 -- 基础学习(三)理解URL和URI的联系与区别
- 一篇文章了解爬虫技术现状
- 爬虫的技术选型
- java 爬虫技术---上
- 分布式网络爬虫架构-技术选型