【python爬虫】爬虫基础

目录

1.爬虫简介

2.爬虫的合法性探究

3.爬虫的初始探入

4.BeautifulSoup库

5.requests模块

5.1 实战:爬取搜狗首页的页面数据

5.2 实战之网页采集器

5.2.1 UA伪装

5.2.2 实战代码

5.3 实战之破解百度翻译

5.4 爬取豆瓣高分电影分类排行榜


1.爬虫简介

什么是爬虫?

——指通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程。

爬虫有什么价值?

 总的来说爬虫的价值就是:实际应用、就业

2.爬虫的合法性探究

爬虫究竟合法还是违法?

——在法律上不被禁止

——具有违法风险

——善意爬虫 恶意爬虫:抢票

带来的风险:

   ——爬虫干扰了被访问网站的正常运营

   ——爬虫抓取了受到被法律保护的特定类型的数据或信息

如何在使用编写爬虫的过程中避免进入局子的厄运呢?

——时常优化自己的程序,避免干扰被访问网站的正常运行

——在使用传播爬取到的数据时,审查抓取到的内容,如果发现了涉及到用户隐私商业机密等敏感内容,需要即时停止爬取或传播

3.爬虫的初始探入

爬虫在使用场景中的分类

——通用爬虫:

      抓取系统的重要组成部分。抓取的是一整张页面数据

——聚焦爬虫:

      建立在通用爬虫的基础上。抓取的是页面中特定的局部内容。

——增量式爬虫:

      监测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。

爬虫的矛与盾:

反爬机制:

    相关门户网站,可以通过制定相应的策略或技术手段,防止爬虫程序进行网站数据的爬取。

反反爬机制:

    爬虫程序可以通过制定相关策略或技术手段,破解门户网站具备的反爬机制,从而可以获取门户网站的信息。

robots.txt协议:

  君子协议。规定了网站中哪些数据可以被爬虫爬取哪些不能被爬取。

4.BeautifulSoup库

Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据。详细不过多介绍了

Beautiful  Soup库的引用
Beautiful Soup库,也叫beautifulsoup4 bs4
约定引用方式如下,即主要是用BeautifulSoup
from bs4 import BeautifulSoup
import bs4

html基本格式:

<html>
  <head>
    <title>This is a python demo page</title>
  </head>
  <body>
    <p class="title">
     <b>The demo python introduces several python courses.</b>
    </p>
    <p class=“course”>Python is a wonderful general‐purpose programming language.
You can learn Python from novice to professional by tracking the following courses:
       <a href="http://www.icourse163.org/course/BIT‐268001" class="py1"
id="link1">Basic Python</a> and
       <a href="http://www.icourse163.org/course/BIT‐1001870001" class="py2"
id="link2">Advanced Python</a>.
    </p>
  </body>
</html> 

<>…</>构成了所属关系

5.requests模块

——urllib模块:古老

——requests模块:简洁高效

什么是requests模块?

  python中原生的一款基于网络请求的模块,功能强大,效率极高

作用:模拟浏览器发请求。

如何使用:(requests模块的编码流程)

    ——指定url

    ——发起请求

    ——获取响应数据

    ——持久化存储

环境安装:

  pip install requests

5.1 实战:爬取搜狗首页的页面数据

import requests

if __name__ == '__main__':
    # 指定url
    url = 'http://www.sogou.com/'
    # 发起请求
    # get方法返回一个响应对象
    response = requests.get(url=url)
    # 获取响应数据:text返回的是字符串形式的响应数据:
    page_text = response.text
    print(page_text)
    # 持久化存储
    with open('./sogou.html','w',encoding='utf-8') as fp:
        fp.write(page_text)
    print('爬取数据结束')

5.2 实战之网页采集器

5.2.1 UA伪装

UA伪装:让爬对应的请求载体身份标识伪装成某一浏览器

UA:User-Agent(请求载体的身份标识)

1 直接访问 ip地址查询

 2.浏览器直接console输入  alert(navigator.userAgent)

  门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一浏览器,则说明是一正常请求,但请求的载体身份标识不是基于某一款浏览器的,则这一请求是不正常的请求(爬虫),服务器端可能会拒绝该次请求。所以要进行UA伪装

5.2.2 实战代码

import requests

if __name__ == '__main__':
    # UA伪装:将对应的User—Agent封装到一个字典中
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }

    url = 'https://cn.bing.com/search?'
    # 处理url携带的参数:封装到字典中
    kw = input('enter a word')
    param = {
        'q': kw
    }
    # 对指定的url发起的请求对应的url是带参数的,并且请求过程中处理了参数
    response = requests.get(url=url, params=param, headers=headers)

    page_text = response.text
    fileName = kw+'.html'
    with open(fileName, 'w', encoding='utf-8') as fp:
        fp.write(page_text)
    print('保存成功')

5.3 实战之破解百度翻译

找阿贾克斯(ajax)请求

    ——对应的请求是post请求,携带了参数

    ——响应数据是一组json数据

import requests
import json
if __name__ == '__main__':
    # 指定URL
    post_url = 'https://fanyi.baidu.com/sug'
    # 进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }
    # post请求参数处理,同get请求一致
    word = input('enter a word:')
    data = {
        'kw': word
    }
    # 请求发送
    response = requests.post(url=post_url, data=data, headers=headers)
    # 获取相应数据json() 返回的是一个字典对象(如果确认响应数据是json类型才使用json)
    dic_obj = response.json()
    # 持久化存储
    fileName = word+'.json'
    fp = open(fileName, 'w', encoding='utf-8')
    #中文不能使用ascii编码
    json.dump(dic_obj,fp=fp, ensure_ascii=False)

5.4 爬取豆瓣高分电影分类排行榜

滑动页面时会产生一个get请求

 

import requests
import json
if __name__ == '__main__':
    url = 'https://movie.douban.com/j/chart/top_list'
    param = {
        'type': '24',
        'interval_id': '100:90',
        'action': '',
        'start': '0',  # 从库中第几部电影取
        'limit': '20'  # 一次取出的个数
    }
    # 进行UA伪装
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36 Edg/101.0.1210.53'
    }
    response = requests.get(url=url, params=param, headers=headers)

    list_data = response.json()

    fp = open('./douban.json', 'w', encoding='utf-8')
    json.dump(list_data, fp=fp, ensure_ascii=False)

    print('over')

注:获取json后可以复制去在线json格式化网站查看json

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天的命名词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值