爬虫学习笔记
selenium
环境配置
- 安装浏览器驱动 地址
- 下载 selenium
pip install selenium - 将驱动放在项目根目录(不需要设置环境变量或引入驱动所在路径)
操作
1. 基本结构
from selenium import webdriver
from lxml import etree
from time import sleep
driver = webdriver.Chrome() # 得到一个对象可以进行各种操作
driver.get('https://ssr1.scrape.center/')
# driver.execute_script('window.scrollTo(0,4000)')
text_page = driver.page_source # 获取网页文件
tree = etree.HTML(text_page) # 得到一个xpath操作对象
lists = tree.xpath('//div[@class="el-row"]/div[2]/a//text()')
for item in lists:
print(item)
sleep(5) # 延迟关闭浏览器
driver.close()
# * get() 请求的地址
# * send_keys('xxx) 给标签输入内容
# * find系列方法 定位标签得到标签
# * execute_script() 执行js脚本
# back() forword() 前进后退
正则表达式
问题一:python字符串和原始字符串的区别?
- python会将字符串中的所有反斜杠开头的字符进行转义,如果可以转义就转义不然就原样输出
- 原始字符串
r'',会使转义字符不进行转义,直接显示出来,如:r'\t' --> \t
贪婪模式和非贪婪模式
默认情况下,匹配的元字符总是尽量多的向后匹配内容(贪婪)
让匹配的元字符尽量少的向后匹配内容(非贪婪)
在元字符后面加上?就变成非贪婪模式>?就变成非贪婪模式
分组
用()括起来,把括起来的作为一个整体操作
- 捕获组
给组起名字
r'(?P<name>xxx)' # ?P<name> name:起名字
scrapy
5+2的模式:五个模块,两个中间件
五大模块简介
- splider
编写爬虫逻辑 - scheduler
调度spider(将spider url放入栈处理) - engine
负责各个模块之间的通信 - downloader
从网上下载数据 - pipline
处理数据,做持久化存储
其中scheduler、engine、downloader由框架自动调用
创建scrapy项目
-
创建项目
scrapy startproject 项目名 -
创建爬虫文件
scrapy genspider 爬虫文件名 域名(xx.xx.com) -
编写爬虫文件
spider --> yield --> pipline ...import scrapy class CateyeSpider(scrapy.Spider): name = "cateye" allowed_domains = ["https://ssr1.scrape.center/"] start_urls = ["https://ssr1.scrape.center/"] def parse(self, response): for data in response.css(".el-card .el-row h2::text"): try: yield {"name": data.get()} # print(data) except: pass # response --> 返回downloader下载回的内容 # -- response解析HTML的方法 # -- css # -- xpath # -- re # -- extract -
运行爬虫
scrapy crawl 爬虫文件
持久化存储
- 基于指令
- 基于管道
class Demo01Pipeline: def open_spider(self, spider): # 爬虫开始调用一次 pass def process_item(self, item, spider): # 处理爬虫数据,每条数据调用一次 return item # 提交给下一个管道 def close_spider(self, spider): # 爬虫结束调用一次 pass
本文来自博客园,作者:panmengxiang,转载请注明原文链接:https://www.cnblogs.com/pmxisme/p/14991301.html

浙公网安备 33010602011771号