爬虫笔记

这篇博客详细介绍了Python爬虫的相关知识,包括正则表达式的字符表示、量词和分组,Python中的re模块,以及括号的用法。接着讨论了XPath的匹配方式,并探讨了进程与线程,如multiprocessing和threading模块的使用。此外,还讲解了BeautifulSoup的数据解析,并提到了Scrapy的可视化部署方法SpiderKeeper和Gerapy的环境配置及基本使用。
摘要由CSDN通过智能技术生成

正则表达式

字符的表示

  • . 任意一个字符,除了换行
  • [a-f] 范围内的任意一个字符
  • \w 字母、数字和下划线组成的任意的字符

量词(数量)表示

  • * 0或多个
  • + 一个以上
  • 0或1个 (非贪婪)
  • {} n个
  • {n,} 至少n个
  • {n,m} n~m个

分组表示

  • () 普通分组,多个正则分组时,如果是search().groups()返回的是一个元组
  • (?P<name> 字符+数量) 带有名称的分组,多个正则分组时,如果是search().groupdict()返回的是一个字典
import re
text = 'sad324sdf4342'
# 普通分组
result=re.search(r'(\d+)[a-z]+(\d+)',text).groups()
print(result)  # ('324', '4342')

带别名分组
result=re.search(r'(?P<n1>\d+?)[a-z]+?(?P<n2>\d+)',text).groupdict()

print(result)  # {'n1': '324', 'n2': '4342'}

python中的正则模块

  • re.compile() 一次生成正则对象,可以多次匹配查询
  • re.match(正则对象,字符串)
  • re.search()
  • re.findall()
  • re.sub() 替换
  • re.split()
import re
text = 'sad324sdf4342'
# 将所有数字替换成120
result=re.sub(r'\d+','120',text)
print(result) # sad120sdf120

#给定列表,每一个元组中包含字母和数字,要求字母和数字分开排序如:['abc12','abc9','abc10','ac8','ac12']
# 排序后的结果是:['abc9','abc10','abc12','ac8','ac12']
arr = ['abc12','abc9','abc10','ac8','ac12']
arr2=sorted(arr,key=lambda item:re.sub(r'\d+',
                                       re.findall(r'\d+',item)[0].rjust(2,'0'),item))
print(arr2)

() 括号的用法

p1 =re.compile("From ((?:\d{1,2}/)+\d{2,4});?")

Xpath

多条件匹配

 response.xpath('//div[@class="card-wrap" and @action-type="feed_list_item"]/@mid').getall()

匹配标签下页面显示的字符串,注意string(.)要单独在一个xpath表达式中

response('//div[@class="card-wrap"]').xpath('string(.)').get()

进程和线程

multiprocessing模块(进程)

  • Process 进程类
  • Queue 进程间通信的队列
    • put(item,timeout)
    • item = get(timeout)

threading 模块(线程)

  • Thread线程类
  • 线程间通信(访问对象)
    • queue.Queue 线程队列
    • 回调函数(主线程声明,子线程调用函数)

BS4数据解析

from bs4 import BeautifulSoup
# 生成bs4根节点对象
root = BeautifulSoup(html,'lxml')
# 查找节点
root.find('标签名',class_='',id_='') # 返回单节点Tag对象
root.find_all('标签名',class_='',id_='',limit=3) # 返回limit指定数量的tag对象列表
root.select('样式选择器')
# 比如: #id , .class , 标签名 , [属性] ,div ul间接子节点,或div > ul直接字节的
  • 节点的属性
    • 获取文本数据
      • div.text/div.string/div.get_text()
    • 获取属性
      • div.get(‘属性名’)
      • div[‘属性名’]
      • div.attrs['属性名]
      • div.attrs.get(‘属性名’)
    • 获取子节点
      • contents 获取所有文本子节点
      • descendants获取所有子节点对象

scrapy - spiderkeeper可视化部署

在这里插入图片描述
博客链接
https://pengshiyu.blog.csdn.net/article/details/80408795?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

环境准备

pip install scrapy scrapyd scrapyd-client spiderkeeper

第一步,启动scrapyd

scrapyd

第二步,启动SpiderKeeper

spiderkeeper

spiderkeeper [options]

  -h, --help            展示帮助信息并且退出
  --host=HOST           host, 默认:0.0.0.0
  --port=PORT           port, 默认:5000
  --username=USERNAME   设置用户名 ,默认: admin
  --password=PASSWORD   设置密码 ,默认: admin
  --type=SERVER_TYPE    接受蜘蛛服务器类型, 默认: scrapyd
  --server=SERVERS      爬虫服务器, 默认: ['http://localhost:6800']
  --database-url=DATABASE_URL
                        SpiderKeeper 数据库,默认: sqlite:home/souche/SpiderKeeper.db
  --no-auth             不进行验证
  -v, --verbose         日志级别

scrapy 打包egg

使用 scrapyd-client 生成 egg 文件 (进入需要上传的scrapy项目目录)

scrapyd-deploy --build-egg output.egg

scrapy - gerapy 可视化部署

https://blog.csdn.net/lm_is_dc/article/details/81087215

环境

pip3 install gerapy

基本使用方法

Usage:

  gerapy init [--folder=<folder>]  
  gerapy migrate
  gerapy createsuperuser
  gerapy runserver [<host:port>]
  gerapy makemigrations
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值