python爬虫学习

系统 shell
windows cmd、PowerShell 、gitbash
mac&linux Bourne Shell(sh)、Bourne Again Shell(bash)、C Shell(csh)、Z Shell(zsh)...

cmd 、PowerShell、Terminal 区别

类型 说明
cmd 命令执行窗口
PowerShell 微软公司开发的任务自动化和配置管理框架。可以理解为 cmd 的升级版,或者说是其超集,类似 Linux 系统的 bash 一样,都是基于壳程序 shell
Terminal 面向Windows10的新命令行程序,Terminal 集成了 Windows 上的 PowerShell、cmd、Windows Linux子系统(WSL)三大环境
bash 复制代码
#查看默认shell   环境变量 { $SHELL: /bin/bash }
echo $SHELL 
# 查看所有shell
cat /etc/shells
# 切换shell (bash)
$SHELL # or /bin/bash
#------------------------
# 切换 zsh
/bin/zsh

ubuntu

zsh

bash 复制代码
# 使用ifconfig
sudo apt install net-tools

# 更新软件源
sudo apt update && sudo apt upgrade -y
# 安装 zsh git curl
sudo apt install zsh git curl -y
# 安装python3
sudo apt install python3
# 查看python3 版本
python3 -V
# 安装python3-pip
sudo apt install python3-pip
# 查看pip3 版本
pip3 -V

配置国内镜像源
tsinghua

bash 复制代码
# 切换根目录并查看目录
cd / && ll
# 找到mnt(你windows上的磁盘磁盘位置),切换到d盘
cd /mnt/d
# 创建目录
mkdir python-test

scrapy

scrapy开源网络爬虫框架(快速、简单且可扩展)

简单来说:数据、网页爬取

配置环境变量

bash 复制代码
# /home/janis/.local/bin
# ubuntu 永久配置 【执行执行过chsh -s /bin/zsh,记得切换bash,命令行输入bash即可】
vim ~/.bashrc
# 最后一行输入 export PATH=$PATH:/home/janis/.local/bin
# 文件生效
source ~/.bashrc
# 验证 scrapy 命令是否可用
which scrapy
# 临时变量,命令行运行
export PATH=$PATH:/home/janis/.local/bin

google browser插件

XPath Helper

items.py

数据建模,提前规定好需要爬取的数据字段

示例

pipelines.py

不同的管道可以处理不同的爬虫数据,同一个管道也可以处理不同的爬虫数据,通过spider.name属性来区分。

  • 使用管道需要在settings.py中配置

  • 权重值小的优先执行,数值不建议大于1000

  • process_item方法是必须存在,且需要return出去

  • 爬虫和数据库交互常用的方法:open_spider(spider)、close_spider(spider)

    在爬虫开启的时候建立与数据库的连接,关闭时断开和数据库的连接

    open_spider(spider):爬虫开启执行一次

    close_spider(spider):爬虫关闭执行一次

中间件(middlewares.py

下载中间件:header/cookie/代理ip(请求定制化) (长写,集成Selenium)

爬虫中间件

下载中间件

重写处理请求或响应方法

一般重写process_request 、process_response

process_request

复制代码
 - 返回数据类型必须是None、request、response
 - 当每个request通过下载中间件时,该方法被调用
返回值 说明
None 无return,默认,该request对象传递给下载器,或通过引擎传递给其他权重低的process_request 方法
request 把 request对象通过引擎交给调度器,不再通过其他权重低的 process_request 方法
response 不在请求,把 response 返回给引擎

process_response

  • 返回数据类型必须是request、response

  • 当下载器完成http请求,传递响应给引擎的时候调用

返回值 说明
request 通过引擎交给调度器继续请求,不再通过其他权重低的 process_request 方法
response 通过引擎传递给其他权重低的process_response方法

示例代码

settings.py

开启中间件/管道、redis配置、自定义配置(PROXY_LIST、USER_AGENT_LIST)等

常见问题

爬取请求报403报错:一般配置user-agent即可解决,难一点的可能需要配置cookie/代理ip地址。

Selenium

Selenium网页自动化执行

scrapy搭配使用:针对js动态加载数据展示页面进行数据爬取

一般源代码都有所需数据,能不集成就不集成,毕竟Selenium会耗费爬虫时间

bash 复制代码
pip3 install -U selenium

ubuntu

安装谷歌

bash 复制代码
wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo dpkg -i google-chrome-stable_current_amd64.deb # 报错,提示缺少依赖

# 报错,提示缺少依赖(执行以下命令)
sudo apt install libvulkan1 
sudo apt --fix-broken install
sudo dpkg -i google-chrome-stable_current_amd64.deb

安装成功

bash 复制代码
# 安装 ChromeDriver
sudo -E pip3 install webdriver-manager

Logging

配置日志

具体实现

_get_handler()方法

py 复制代码
import scrapy
import logging
logger = logging.getLogger(__name__) # 自定义记录器,__name__ 当前爬虫路径(myTestLog.spiders.mydomain2)
if os.path.exists("example2.log"): os.remove("example2.log") # 解决mode='w'无法实现问题
handler = logging.FileHandler('example2.log',mode='a',encoding='utf-8') # 输出到文件(只输出手动输入的日志)
handler.setLevel(logging.WARNING)
logger.addHandler(handler) 

class Mydomain2Spider(scrapy.Spider):
    name = "mydomain2"
    allowed_domains = ["docs.scrapy.org"]
    start_urls = ["https://docs.scrapy.org/"]

    def parse(self, response):
        logger.info(logger.level)
        logger.debug('This message should go to the log file---2')
        logger.info('So should this---2')
        logger.warning('And this, too---2')
        logger.error('And non-ASCII stuff, too, like Øresund and Malmö---2')
相关推荐
迪丽热爱12 分钟前
多媒体应用17-831(补)
学习
卷无止境24 分钟前
FastAPI 的可观测性进化,从打日志到看清整个系统的呼吸
后端·python·fastapi
tju新生代魔迷24 分钟前
Verilog HDL学习笔记(五)| 第5章 门级建模(上)——基本门原语与门延迟
笔记·学习
老当益壮梁奶奶33 分钟前
Linux软件编程学习笔记(十一):深入浅出 TCP 协议与 Socket 编程实践
linux·c语言·笔记·学习·tcp/ip
卷无止境41 分钟前
FastAPI 的 CI/CD 之路,从代码提交到线上运行
后端·python·fastapi
清钟沁桐41 分钟前
mlir 编译器学习笔记之十四 -- cpu算子自动生成
笔记·学习·mlir
2601_9623824343 分钟前
系统学习Python——单元测试unittest:执行测试用例(unit test python)
python·测试用例·测试框架·unittest·测试集合
minglie11 小时前
多项式分裂域的自同构群的求法
学习
小玮看世界1 小时前
[Python]动态规划三步走:从爬楼梯到打家劫舍,再到最大子数组和
开发语言·python·动态规划
风萧萧19991 小时前
JAVA :JSONObject转换为XML
xml·java·python