2021/6/6爬虫第六次周复盘

一、复习bs4

xpath:记语法、copy (full) xpath
bs4:(三大种类操作)

  1. 遍历
    • 父、长辈们
    • 上、下兄弟(们)
    • 子、晚辈们
  2. 查找
    • “搜索文档树”(以后再看)
    • find/find_all [元素、属性值、字符串]
  3. 修改
    第十讲的select()、修改文档树(以后再看)
    补充:
    Comment : 注释
html = '<a><!--大家慢慢来,好饭不怕晚,先把知识点掌握--></a>'
soup2 = BeautifulSoup(html,'lxml')
print(type(soup2.string)) # <class 'bs4.element.Comment'>

二、selenium之前

爬取数据(包括解析)

  • selenium爬取数据
  • selenium中的page_source+(三个方法)
  • requests+(三个方法)
    其中(三个方法 指正则、xpath、bs4)

selenium输入信息的方式:

  • send_keys类
  • 下拉框
  • 执行js
    补充:
    行为链–进行封装
    加快速度–无界面
    基本–定位+操作
    反爬–页面等待

三、大总结(细节)

3.1settings.py修改

  • False,UA,WARNING
  • 管道 普通;保存图片时
  • 保存图片时:加上
ITEM_PIPELINES = {
   # 'audi.pipelines.AudiPipeline': 300,
      'scrapy.pipelines.images.ImagesPipeline':1   #固定写法
}

import os
IMAGES_STORE = os.path.join(os.path.dirname(os.path.dirname(__file__)),'images')   #IMAGES_STORE不能改
  • 并发(多线程数量) DELAY

3.2UA设置

  • settings 普通设置
  • 下载中间件

3.3反爬

  • 设置UA
  • 设置delay

3.4运行不成功

  • URL yield
  • items
  • settings

3.5翻页

  • 普通:(转入平行的网址)
    可以找页数的规律
    直接找下一页的Url地址 然后 yield scrapy.Request(url,callback=None)
  • 转入子页
    看看检查里是否有现成的、找规律

3.6保存图片

方式一:

import os
from scrapy.pipelines.images import ImagesPipeline
from urllib import request

class AudiPipeline:
    def process_item(self, item, spider):
        # 获取图片的url
        src = item['src']
        # 获取图片的名字
        img_name = item['src'].split("__")[-1]
        
        # 动态的添加这个路径(目录)
        file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'images')
        print(img_name)
        # request.urlretrieve专门用来保存二进制文件
        request.urlretrieve(src, file_path + '/' + img_name)
        return item

方式二:
下载图片的 Images Pipeline
使用images pipeline下载文件步骤:
• 定义好一个Item,然后在这个item中定义两个属性,分别为image_urls以及images。image_urls是用来存储需要下载的文件的url链接,需要给一个列表
• 当文件下载完成后,会把文件下载的相关信息存储到item的images属性中。如下载路径、下载的url和图片校验码等
• 在配置文件settings.py中配置IMAGES_STORE,这个配置用来设置文件下载路径
• 启动pipeline:在ITEM_PIPELINES中设置scrapy.pipelines.images.ImagesPipeline:1

四、settings.py文件的补充

settings.py文件可以作为配置项 变量大写表示公共、配置
用于连接外部与scrapy 编程时不知把一些逻辑(简单)放哪里,可以放settings.py文件中

五、hashlib (一种加密方式)

import hashlib
h = hashlib.sha1()
print(h)
h.update('hello'.encode('utf-8'))
print(h.hexdigest()) # hexdigest() 返回的是十六进制的字符串

六、类知识点回顾

class A:
    # 类属性 直接在类中定义的属性就是类属性
    # 类属性可以通过类或类的实例来访问,无法通过实例对象来修改
    count = 3

    def __init__(self):
        # 实例属性,通过实例对象添加的属性都是实例属性
        # 实例属性 只能通过实例对象来访问和修改,类对象无法访问和修改
        self.name = '葫芦娃'


    # 实例方法
    # 在类中定义,以self为第一个参数的方法都是实例方法
    # 通过实例对象来调用,会自动将当期对象作为self传入 a.test()
    # 当通过类对象来调用,不会自动传递self。此时我们必须手动传递self
    def test(self):
        print('我是实例方法....')

    # 类方法
    # 在类的内容部 使用@classmethod 来修饰的方法就是类方法
    # 类方法的第一个参数是cls 也会被自动传递 cls就是当前的类对象
    # 类方法可以通过类来调用也可以通过类的实例来调用,没有区别
    @classmethod
    def test2(cls):
        print('我是类方法....')

a = A()
# a.count = 100 # 实例属性 注意:当使用实例对象对类方法进行赋值时,a这个实例对象也拥有的实例属性count  
A.count = 1
print('A',A.count)
print('a',a.count)
# print('a',a.name)
# print('A',A.name) # AttributeError: type object 'A' has no attribute 'name'

# a.test() 等价于 A.test(a)
# a.test()
# A.test(a)

# A.test2() 等价于 a.test2()
# A.test2()
# a.test2()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

笔记本IT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值