Scrapy

Scrapy框架

scrapy startproject name

items 爬取目标

middlewares 中间件

pipelines 爬后处理

settings 总体设置

items ->spiders (middlewares)->pipelines all settings

22

查看设置信息:scrapy settings --get BOT_NAME

交互式:scrapy shell 网址

scrapy bench		电脑爬取网址速度测试	4740

scrapy genspider -l		可用模板信息

  	basic
  	crawl
  	csvfeed
  	xmlfeed

scrapy genspider -t basic name 域名		创建爬虫文件

scrapy check name		测试爬虫是否合规		不包含后缀

scrapy crawl name (--nolog)	省略日志信息		运行爬虫文件

scrapy list		查看那些可用的爬虫文件

scrapy parse  https://www.baidu.com/ 		获取网址

Xpath表达式

/ 逐层提取

text() 提取标签下面的文本

/html/head/title/text()

//标签名 提取所有的标签

//标签名[@属性=‘属性值’] []约束 提取属性名为xx的标签

@属性名 代表取某个属性

//div[@class='tools']

数据去重

布隆

模拟登录

密码输错,返回的信息不多,但post地址一样

Form Data

lxml

网页源码转化为树的形式

PhantomJS

饭汤JS 可获取异步数据

import time
from selenium import webdriver
browser = webdriver.PhantomJS()
browser.get("http://www.baidu.com")
a=browser.get_screenshot_as_file("F:/PhantomJS/test.jpg")    #截图当前网页

browser.find_element_by_xpath('//*[@id="kw"]').clear()		#模拟人点击
browser.find_element_by_xpath('//*[@id="kw"]').send_keys("爬虫")
browser.find_element_by_xpath('//*[@id="su"]').click()

time.sleep(5)			#延时不够,信息加载不完全
a=browser.get_screenshot_as_file("F:/PhantomJS/test2.jpg")
data=browser.page_source		#浏览器的数据
browser.quit()		#关闭浏览器
print(len(data))
import re
title=re.compile("<title>(.*?)</title>").findall(data)
print(title)

腾讯动漫

from selenium import webdriver
import time
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
# 伪装成浏览器
import re
import urllib.request

# 设为新的浏览器的类型
dcap = dict(DesiredCapabilities.PHANTOMJS)
dcap["phantomjs.page.settings.userAgent"] = ("Mozilla/4.0 (compatible; MSIE 5.5; windows NT)")
browser = webdriver.PhantomJS(desired_capabilities=dcap)


url="http://ac.qq.com/ComicView/index/id/539443/cid/1"
browser.get(url)  # 获取浏览器地址
a = browser.get_screenshot_as_file("F:/PhantomJS/test.jpg")  # 截图

for i in range(10):  # 滑动浏览器
    # browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
    js = 'window.scrollTo(' + str(i * 1280) + ',' + str((i + 1) * 1280) + ')'  # 1280为分辨率
    browser.execute_script(js)
    time.sleep(5)


print(browser.current_url)  # 查看当前url
data = browser.page_source  # 漫画数据
fh = open("F:/PhantomJS/dongman.html", "w", encoding="utf-8")
fh.write(data)  # 写入漫画数据
fh.close()
browser.quit()

pat = '<img src="(http:..ac.tc.qq.com.store_file_download.buid=.*?name=.*?).jpg"'
allid = re.compile(pat).findall(data)
for i in range(0, len(allid)):
    thisurl = allid[i]
    thisurl2 = thisurl.replace("amp;", "") + ".jpg"
    print(thisurl2)
    localpath = "F:/PhantomJS/dongman/" + str(i) + ".jpg"
    urllib.request.urlretrieve(thisurl2, filename=localpath)

分布式爬虫

应用多台机器同时实现爬虫任务 区别于单机爬虫的一种架构

多台机器之间的通信

3

爬取内容的存储:

1 存储在中心节点中

2 存储在各个节点中

任务分配 (redis)

数据存储 (Mysql)

Docker

轻量级容器级虚拟化技术

轻、快

systemctl start docker		#开启docker

docker search ubuntu		#查找
docker pull ubuntu 			#下载

docker images				#查看可用镜像
docker ps -a 				#查看容器

docker run -tid idj-4		#创建容器		-ti 交互	-d 后台
docker run -tid --name name idj-4		#创建指定名字的容器


docker attach idr-4			#进入容器

exit						#退出容器	容器停止
ctrl+q+p					#退出容器	容器不停止

docker start idr-4			#开启容器
docker stop idr-4			#停止容器

docker commit idr-4 name:version	#打包容器为镜像

docker run -tid --name h1 idj-4					#创建容器
docker run -tid --name h2 --link h1 idj-4		#创建连接h1的容器

查看网络情况

cat /etc/hosts
ping h1-ip

外界导入

docker load --input name.tar

导出

docker save -o /mytest.tar idj-4

Redis

数据库 速度快 作为共享中心

安装与启动redis

apt update

apt -y install redis-server			#下载

/etc/init.d/redis-server restart		#启动redis-server

redis-cli		#启动redis客户端		exit退出

redis-cli -h 127.0.0.1	-p 6379			#  		-h	连接的主机		-p  指定端口	默认6379

使用基础

set zhang 123456

get	zhang

get nokonw		#(nil)

strlen zhang 	#(integer)	6	#对应值的长度

mset a 199 b 456 c hello		#批量设置键值对

mget a b c							#批量取出键值对

哈希存储法:键-域-值 key-field-value

hset title name hello
hget title name 

hset title sex boy		
hget title sex

hmset title name abc id 110 sex boy		#批量设置
hgetall title			#取出所有	奇域偶值
hset url 123.com 1
hget url 123.com		查看网址是否爬取

分布式爬虫构建

docker run -tid --name center
docker run -tid --name  c1 --link center idj-4

开启mysql服务器

/etc/init.d/mysql restart

vim /etc/mysql/my.cnf

1

注释掉

root用户只支持本地连接

所以要新创建个用户

mysql -h 127.0.0.1 -u root -p1234

create user "xiaocai"@"%" identified by "1234";		#	%支持任意的主机连接

grant create,select,updata,delete,insert on \*.\* to xiaocai;		#给权

redis

启动redis

/etc/init.d/redis-server restart

redis-cli -h 127.0.0.8		#refused

修改配置文件

vim /etc/redis/redis.conf

2

修改配置文件后要重启,容器重启

redis-cli -h 127.0.0.8		#sucess
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值