1. 数据分析——数据提取

基本知识

爬虫是批量化 自动获取既有数据;通常来说都是获取既有数据,但也有特殊的例如批量领取优惠券和帐号 批量买商品 自动做任务(签到)等等

爬虫的应用场景:
–企业中:竞品调研,办公自动化(自动从公司后台获取数据进行处理);
–为个人服务当中:想看小说爬虫爬下来;
–盈利:抢票,抢演唱会门票,自动评论,自动点赞

爬虫的分类:
–聚焦爬虫:完成某一项特定数据的采集
–通用爬虫:所有内容都采集下来
–增量爬虫:内容发生变化的时候,可以获取增量内容
–暗网爬虫:违法,见不得光的地方,领域十分特殊,应用较少,内容包括了前三个

爬虫是否合法?
业内有一个robots机器人协议,协议规定了那些内容可以获取,那些内容不可以获取。例如
https://www.baidu.com/robots.txt
可以查看百度的robots协议
通常协议中会标明哪些不然爬
国内比较顶级的购物网站都没有机器协议或者少
还有一个君子协议:未标注是否可以爬取,但也是些能爬有些不能爬,爬了不能爬的可能会吃公家饭

写爬虫的注意事项:
–给服务器留活路,爬虫开启后,使用其他设备访问爬虫网站
–脱离敏感信息,例如个人信息
–不要爬公共资源的网站,例如gj相关网站

cookie特性
Cookie由服务器返回,存储在浏览器中
Cookie支持过期,具有时效性
Cookie是键值存储 Key-Value
Cookie不能跨网站,不能跨域名
网络请求会自动携带本网站所有有效Cookie
Session和Cookie的区别

数据抓取方法一:使用DrissionPage框架进行数据抓取

前期准备

安装DrissionPage
DrissionPage文档说明:https://g1879.gitee.io/drissionpagedocs/
下载ChromeDirver
https://developer.chrome.com/docs/chromedriver/downloads?hl=zh-cn
下载下来后将zip文件解压,将exe文件放在jupyter文件夹下面
在这里插入图片描述
python使用文档

使用方法

DrissionPage使用文档
使用DrissionPage爬取高考网大学信息
注意:高考网需要登陆才可以爬取下一页的内容,否则只会爬取第一页的内容,所以在爬取之前先登录网站

0.数据提取——使用Cookie进行登录
提取Cookie

from DrissionPage import ChromiumPage

# 创建一个ChromiumPage对象
page = ChromiumPage()
page.get(一定要是一个登录页面的url)
# 打开页面之后手动进行登录,完成后提取Cookie
cookies = page.get_cookies()
# 将数据进行json序列化,转换成文本进行存储
import json
cookies_str = json.dumps(cookies)
# 使用文件存储,将字符串存到文件中
with open("cookies.txt","w",encoding="utf-8") as file:
    file.write(cookies_str)

使用刚刚的cookie进行登录

from DrissionPage import ChromiumPage
import json

# 创建一个ChromiumPage对象
page = ChromiumPage()
with open("cookies.txt","r",encoding="utf-8") as file:
    cookies_str = file.read()
    
# 使用json将字符串转换为json格式的数据
cookiess = json.loads(cookies_str)

# 向浏览器中注入Cookie
    # 有些Cookie加不进去,可以加一个日常捕获
try: 
    page.set.cookies(cookiess)
except Exception as e:
    print(e)

page.get(未登录状态的url)

#  关闭浏览器
page.close()

数据抓取方法二:Request

双R:Request(请求是自己构造的)和Response(响应是服务器返回的)
双R的构成:请求行,请求头,请求体,响应行,响应头,相应体
我们需要做的:模拟请求端的请求行和请求头和请求体

静态数据获取:
页面上面看得到可以直接获取的

import requests

# 请求头
headers={
    "User_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"

}

#请求头
url= "url"

# 请求体

# 第一种请求方式
response = requests.request("GET",url,headers=headers)

动态数据获取:
在页面上看的到,发送请求的时候获取不到的,主要是要去分析哪些是动态数据,获取动态数据的url是什么

comment_url = "https://www.xinpianchang.com/api/xpc/comments/article/v2?article_id=12944220"
# 第二种请求方式
response_comment = requests.get(comment_url, headers = headers)

数据提取:XPath
Xpath是一门在 XML 文档中查找信息的语言,可以兼容html,从1开始数
json就是python中的字典,列表

xpath教程

准备工作
安装lxml

数据抓取方法三:

准备工作
Library:requests,urllib,pycurl
Tools:curl,wget,httpie

0:urllib premier
urlretrieve() #url檢索
urlcleanup() #清除緩存
info() #顯示基本的環境信息
getcode()
geturl()

1

import urllib.request
import re

url = "https://read.douban.com/provider/all"
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
# 通过headers获取对url的请求
ret = urllib.request.Request(url, headers=headers)
# 打开url并读出来
res = urllib.request.urlopen(ret).read()      #打開並讀取王爺
# 需要將data進行編碼
data = res.decode('utf-8')  # 得到了網頁内容
# 通過正則表達式篩選我們需要的内容,需要分析網頁源代碼
pat = '<div class="name">(.*?)</div>' 
# 正则表达式中   .
mydata = re.compile(pat).findall(data)            #檢索網頁

print(mydata)

2:不需要設置headers

import urllib.request

url="https://www.pressofatlanticcity.com/"
filename="D:/Document/0.professional/python/NetBug/news.html"  #這裏存儲的是網頁
urllib.request.urlretrieve(url,filename)    #檢索一個網頁

3

urllib.request.urlcleanup()
file=urllib.request.urlopen("https://www.baidu.com/")  #打開一個網頁
print(file.info())

4
200 访问成功

print(file.getcode())   #200

print(file.geturl())   # https://www.baidu.com/   [打印出來的是個鏈接]

5
timeout=2
#超時設置,超過兩秒未獲取到内容返回超時信息

file = urllib.request.urlopen("https://www.youtube.com/", timeout=2)  
# urllib.error.URLError: <urlopen error timed out>

6 HTTPError常见状态码

a. 2XX 成功系列
b. 3XX 重定向
c. 4XX 客户端错误
d. 5XX 服务器内部错误
在这里插入图片描述
418 触发网站的反爬虫机制,程序猿给你开的玩笑
7.URLError

笔记来源:天善智能网络课程,千锋教育网络课程

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值