Day回顾
1. 多线程爬虫
1. 多进程:大量密集并计算
2.多线程:I/O密集操作(网络I/O,本地磁盘I/0)
2. 多线程爬虫
1. url 队列: put(url)
2. RES 队列: 从URL队列中get()发动请求,put(html)
3. 创建多个解析队列,发请求,获取html源码
4. 创建多个解析线程,解析html
2. BeautifulSoup :HTML/XML
1. 使用流程
1. 导入模块 :from bs4 import BeautifulSoup
2. 创建对象 :soup = BeautifulSoup(html,'lxml')
3. 查找节点 :r_list = soup.find_all("div",attrs={"class":"name"})
2. 支持解析库
1. lxml
2. html.parse
3. xml
3. 常用方法:
1.find_all(): 得到列表
r_list = soup.find_all("div",attrs={"class":"name"})
2. string属性
Scrapy
1. 异步处理请求框架
2. 组成
Engine、Scheduler、Downloader、Item Pipeline、
Spider、 Downloader Middlewares 、Spider Middlewares
3. 运行流程
1. 引擎开始统揽全局,向Spider所要url
2. 引擎拿到url,交给调度器,入队列
3. 调度器从队列中拿出一个url给引擎,通过 下载中间件交给下载器去下载
4. 下载器下载完成,把响应交给引擎
5. 引擎把响应通过蜘蛛中间键交给爬虫程序
6. spider处理完成后
把数据通过引擎交给项目管道
把新的url通过引擎在交给调度器入队列
7. 调度器中没有任何请求,程序结束
4. 创建项目流程
1. scrapy startproject Lianjia
2. cd Lianjia/Lianjia
3. 定义爬取的数据结构:subl items.py
import scrapy
class LianjiaItem(scrapy.Item):
housename = scrapy.Field()
price = scrapy.Field()
4. 创建爬虫文件
cd spiders
5. scrapy genspider Lianjia 'Lianjia.com'
name ='Lianjia'
allow_domains =["Lianjia.com"]
start_urls =[""]
def parse(self,response):
....
6. 项目管道:subl piplines.py
class LianJiapipeline(object):
def process_item(self,item,spider):
处理数据代码
7. 全局配置:subl setting.py
ROBOTSTXT_OBEY = Fasle
USER_AGENT =
ITEM_PIPELINE=
DEFAULT_REQUEST_HEADERS={"":""}
8. cd spider
9. scrapy crawl 爬虫名称
5. driver如何执行一个js脚本
driver.execute_script('window.scrollTo(0,document.body.scrollHeight)')
=================================================================================
day07笔记
1. 生成器(yield)
1. yield作用:把1个函数当做1个生成器来使用
2. yield特点:让函数暂停,等待下一次调用
2. 项目:Csdn
1. 知识点: yield、piplines.py
2. 网址:https://blog.csdn.net/tonydz0523/article/category/7376973
3. 目标:
标题: //div[@class="article-title-box"]/h1/text()
发表时间: //div[@class="article-bar-top"]/span[@class="time"]/text()
阅读数: //div[@class="article-bar-top"]/span[@class="read-count"]/text()
4. 步骤
1.创建项目
2.定义爬取数据结构
3.创建爬虫程序
4.写管道文件
5.全局配置文件
6.运行爬虫
3.知识点
1. extract() :获取选择器对象中的文本
response.xpath('')得到的结果为选择器对象的列表
2. Pipelines.py 中必须有1个函数叫:
def process_item(self,item,spider):
return item
3. 爬虫程序中,start-urls必须为列表
4. 项目:
1.网址:http://www.daomubiji.com/dao-mu-bi-ji-1
2.爬取目标:
1.书的名称:
item['bookName']=response.xpath('//h1[@class="focusbox-title"]').extract()[0]
2.书的标题
articles=response.xpath('//article[@class="excerpt excerpt-c3"]/a/text()')
for article in articles:
info = article.split(' ')
# info = article.split()
item['bookTitle'] = info[0]
item['zhNum'] = info[1]
item['zhName'] = info[2]
书的章节 //article[@class="excerpt excerpt-c3"]/a/text()
章节数量
章节名称
3.
章节链接 //article[@class="excerpt excerpt-c3"]/a/@href
5.MongoDB
1. 在settings.py中定义相关变量
2. 在pipelines.py中添加项目管道
3. 在settings.py中设置项目管道
6.Mysql
7.Scrapy 设置log: settings.py
# 设置log级别
LOG_LEVEL = 'DEBUG'
# 指定本地log文件
LOG_FILE = 'daomu.log'
5层日志级别
CRITICAL :严重错误
ERROR :一般错误
WARNING: 警告信息
DEBUG : 调试信息
INFO :一般信息
8.腾讯招聘网站案例
1. URL :https://hr.tencent.com/social.php?start=0
https://hr.tencent.com/social.php?start=10
2. Xpath匹配
//tr[@class="odd"] | //tr[@class="even"]
职位名称 ./td[1]/a/text()
详情连接 ./td[1]/a/@href
职位类别 ./td[2]/text()
招聘人数 ./td[3]/text()
工作地点 ./td[4]/text()
发布时间 ./td[5]/text()
9. Fiddler抓包工具使用
1. 抓包工具设置
1. Tools ->options ->HTTPS -> ...from browsers...
Actions -> Trust root Certificate
2. Tooles -> opitons ->connections : 设置端口:8888
3. 重启Fiddler抓包工具
2. 设置浏览器代理
1. Proxy SwitchOmega -> 选项 -> 新建情景模式 -> http 127.0.0.1 8888
->左下角 应用选项
2. 点击浏览器右上角图标 -> AID1807 ->上网
3. Fiddler常用选项
1. 选项卡 :Inspectors
Headers :请求报头
WebForms :POST请求表单数据(在body中)
Raw : 以文本形式显示整个请求信息
10.设置手机抓包
1.Fiddler
2.在手机上安装证书
1. 打开手机浏览器: http://ip地址:8888
## ip地址微电脑的ip地址(ipconfig)
2. 在页面上下载(FiddlerRoot certificate)
3. 安装
3. 设置手机代理
1. 打开手机已连接的wifi,代理设置->改成手动
2. 输入ip地址:你电脑的ip
3. 输入端口号: 8888