爬虫技术 课1

爬虫技术初级课


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

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)
  1. 转换请求内容为xpath库能解析的格式
  2. 补全网页格式(因为在1.中,可能会出现丢失网页标记的情况,因此需要补全)
  3. xpath提取网页内容的表达式
表达式
nodename选取nodename 的所有子节点
nodename[n]第n个元素
/从当前节点
//从当前节点选取所有子孙节点
.选取当前节点
@选取属性

4.text()选取当前节点的文本
5.HTML的标记,提取频率较高的标记有:

a超链接 文本,网址
div
p文字标记
span
ul
li

常用属性:
id属性:一般用于定位一个值时(因为网页中的id是不重复的)
class属性:一般用于定位批量值时(网页中的class属性是可以重复的)

开发者工具的使用:
elements :面板
network :面板
application

6.提取元素路径,右键单击-Copy-xpath
span

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 动态网页的爬取

图片库

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值