C 1. 背诵 - scrapy静态页面、js页面解析(18年7月)

1.1 页面解析


  1. self的含义:
    在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self,参考:
    https://blog.csdn.net/love666666shen/article/details/78189984

2 xpath常用命令


  1. 常用命令
# 路径
'/html'     :html节点
'/html/body/div/a'  : 选中div子节点中的所有a
'//a'   :选中文档中的所有a
'/html/body//img'   :选中body后代中的所有img
# 文本与属性
'//a/text()'    :选中a的所有文本
'//div/*/img'   :选中div孙节点中的所有img
'//img/@scr'    :选中所有Img的属性
'//@href'   :选中所有的href属性
# [谓语]:查找包含某个特定值的节点
'//div[@id]'    :选中所有含有id属性的div
'//div[@id="images"]'   :选中所有含有id属性且值为“images”的div
  1. 案例
# 抓取当当畅销榜书名
from scrapy.selector import Selector
from scrapy.http import HtmlResponse
import requests

body = requests.get('http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-month-2018-6-1-1').text
response = HtmlResponse(url='http://example.com', body=body, encoding='utf-8')

# xpath提取信息
name = response.xpath('//div[@class="name"]//@title').extract_first()
print(name)

# css提取信息
name2 = response.css('div.name a::attr(title)').extract_first()
print(name2)

3 css常用命令


# 选中所有的img
>>> response.css('img')
# 选中div后代中的img(后代元素包括子代、孙代等)
>>> response.css('div img')
# 选中body子元素中的div元素
>>> response.css('body>div')
# 选中包含style属性的元素
>>> response.css('[style]')
# 选中属性id值为images-1的元素
>>> response.css('[id=images-1]')
# 选中CLASS属性包含img的a元素
>>> response.css('a.img')
# 选中CLASS属性包含img的元素
>>> response.css('.img')
# 选中所有a的文本
>>> response.css('a::text').extract()
# 选中所有a的href属性文本
>>> response.css('a::attr(href)').extract()

4 js 页面解析


  1. Splash 简介
    Splash 是 Scrapy 官方推荐的 JavaScript 渲染引擎,是一款轻量级的无界面浏览器,类似于 PhantomJS
  2. 安装
    pip install scrapy-splash

4.1 SplashRequest 构造器参数

  • scrapy_splash中定义了一个SplashRequest类,用户只需使用scrapy_splash.SplashRequest(替代scrapy.Request)提交请求即可。
# 情况一
import scrapy_splash
scrapy_splash.SplashRequest()

# 情况二
from scrapy_splash import SplashRequest
SplashRequest()
  • 下面是 SplashRequest 构造器方法中的一些常用参数。
    • ① url :与scrapy.Request中的url相同,也就是待爬取页面的url(注意,不是Splash服务器地址)。
    • ② headers: 与scrapy.Request中的headers相同。
    • ③ cookies:与scrapy.Request中的cookies相同。
    • ④ args:传递给Splash的参数(除url以外),如wait、timeout、images、js_source等。

4.2 流程

  • 第一步:创建项目
$ scrapy startproject splash_examples
  • 第二步:在setting.py 中对scrapy-splash 进行配置,添加内容如下:
# 1. Splash服务器地址
SPLASH_URL = 'http://localhost:8050'

# 2. 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# 3. 设置去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

# 4. 用来支持cache_args(可选)
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
  • 第三步:修改Spider
# 把 ScrapyRequest(url) 改为SplashRequest(url, args={'images':0,'timeout'=3})

5 单词


  1. extract() 提取
  2. yield 生成器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值