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')
相关推荐
AI的探索之旅26 分钟前
AI + LLM Wiki 高效学习 OpenCV:我的 8 步闭环方法论
人工智能·opencv·学习
FriendshipT27 分钟前
Ultralytics:解读 YOLO26 知识蒸馏
人工智能·pytorch·python·深度学习·yolo
weixin_4316004436 分钟前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
BUG研究员_36 分钟前
工具绑定与调用
python·agent
苏灿烤鱼37 分钟前
AI Agent 深拆 | 图能让 AI 决策可追责吗?Semantica 登顶拆解
python·github·agent
Sirius.z9 小时前
第R6周:LSTM实现糖尿病探索与预测
python
名字还没想好☜9 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王9 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
Dxy123931021610 小时前
Python 如何使用 MySQL 的事务
python·mysql
今儿敲了吗14 小时前
Python ——第三方包
笔记·python