爬虫总结篇

爬虫的总结汇总

爬虫介绍

1.爬虫是否违法?
​	~ 法不禁止即为许可
​	~ 隐匿自己的身份 ---> 商业IP代理
​	~ 不要被目标网站举证有破坏动产行为

2.爬虫的分类和作用?
​	~ 通向爬虫 ---> 搜索引擎
​	~ 定向爬虫 ---> 有具体的爬取目标
​	~ 尽量遵守爬虫协议 ---> robots.txt

3.爬虫怎么写
​	~ 抓取页面 ---> requests / aiohttp
​	~ 解析页面
  - 正则表达式 ---> re (regular expression)
    ~ compile() ---> Pattern
    ~ search / match ---> Match ---> group()
    ~ findall() ---> list
  - XPath解析 ---> lxml
    ~ 浏览器的开发者工具 ---> Copy ---> Copy full XPath
  - CSS选择器解析 ---> beautifulsoup4 / pyquery
    ~ BeautifulSoup
     - select():获取跟CSS选择器匹配的元素 ---> list
     - select_one():获取跟CSS选择器匹配的第一个元素 ---> WebElement
       ~ text: 获取标签中的内容
       ~ attrs: 字典,通过键值对的方式获取标签的属性值
​	~ 保存数据 
  - CSV(逗号分割值文件) ---> csv
     reader / writer ---> writerow()
  - Excel ---> xlrd / xlwt / openpyxl (excel版本有关)
    - Workbook ---> 工作簿 ---> create_sheet() 
    - ---> Worksheet ---> 工作表 ---> cell(row, col, value) ---> 单元格


4.如何抓取动态内容?
 - 直接找到提供JSON数据的接口
   ​	游览器开发者工具 ---> Network ---> XHR ---> 提供异步数据的接口
   ​	专业的抓包工具 ---> Charles / Fiddler / Wireshark
- Selenium驱动游览器获取动态内容
  - 自动化测试工具
    - IDE
    - Remote Control
    - WebDriver: 驱动游览器模拟用户操作 ---> 抓取到动态内容
      - Chrome()
        - get() 加载页面
        - 隐式等待 / 显示等待
          - implictly_wait(10): 如果元素在10秒内没有出现就引发异常
          - WebDriverWait(browser, 10) ---> until() ---> 指定等待条件
        - page_source: 页面带动态内容的HTML代码
        - find_element_by_xxx() ---> Tag
        - find_elements_by_xxx() ---> [Tag]
          - text:获取标签中的文本内容
          - get_attribute(): 获取标签属性
          
5.如何实现并发(并行)编程?
​		并行: 真正的同时进行, 需要多CPU的支持
​		并发: 可能不是真正的同时进行,但是通过快速的切换制造出并行的效果
线程: 操作系统分配CPU的基本单位,最小的执行单元
进程:操作系统分配内存的基本单位,是程序在一组数据上的活动
通常启动一个程序,就启动了一个(或多个)进程,一个进程中,又可以包含一个或多个线程
单线程(只有主线程煤制油唯一的一个执行线索)   
	- 多线程 ---> I/O密集型任务(爬虫) ---> GTL(全局解释器锁) ---> 无法使用cpu的多核特性

	- 多进程 ---> 计算密集型任务(音视频的编解码、文件压缩、机器学习算法)
	- 异步编程 ---> I/O密集型任务(爬虫) ---> 通过提高CPU利用率达到协作式并发
	
6.easyocr 验证码解决掉---> ocr(optical character recognition)
pip  install easyocr
多线程
from concurrent.futures.thread import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=32) as pool:
    f1 = pool.submit(download, 'Python从入门到住院')
    f1.result()
多进程
from multiprocessing import Process
with ProcessPoolExecutor(max_workers=32) as pool:
    f1 = pool.submit(download, 'Python从入门到住院')
    f1.result()
爬虫基础1:页面的内容的获取 —— requests
1.获取页面内容:
requests.get(url)
response = requests.get('https://baidu.com')

2.获取页面内容
1)获取页面内容原数据(类型时二进制) - 主要针对图片,视频,音频
print(response.content)
2)获取页面的内容文本格式数据 - 针对网页
print(response.text)
3)将获取的内容进行json转换 - 针对返回数据时json数据的接口
print(response.json())

3.天年假客户端信息 - 伪装成游览器 - 在不能直接requests的时候使用,先使用User-Agent,不行再使用Cookie。两个都在页面的Network中查找
hearders = {
   
    'User-Agent': '',
    'Cookie': ''
}
response = requests.get(url, headers=headers)

解决中文显示编码值的问题:
response.text.encode().decode('unicode_escape')
爬虫基础2:页面的内容获取 —— selenium的使用
1.创建游览器对象并加载页面
from selenium import webdriver
driver = webdriver.Chrome()
driver.get(url)

2.游览器对象的基本配置
# 创建设置对象
options = webdriver.ChromeOptions
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值