爬取:http://quotes.toscrape.com

单页面

# -*- coding: utf-8 -*-
import scrapy class QuoteSpider(scrapy.Spider):
name = 'quote'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/']
"""
知识点
1. text()获取标签的text
2. @属性 获取属性的值
3. extract()查找多个 extract_first() 查找一个
"""
def parse(self, response):
# print(response.text)
quotes = response.xpath('//div[@class="col-md-8"]/div[@class="quote"]')
# print(quotes)''
for quote in quotes:
print('=' * 20)
# print(quote)
# extract_first() 查找一个
text = quote.xpath('.//span[@class="text"]/text()').extract_first()
print(text)
author = quote.xpath('.//span/small[@class="author"]/text()').extract_first()
print(author)
# extract()查找多个
tags = quote.xpath('.//div[@class="tags"]/a[@class="tag"]/@href').extract()
print(tags)

所有页面

# -*- coding: utf-8 -*-
import scrapy class QuoteSpider(scrapy.Spider):
name = 'quote'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/']
"""
知识点
1. text()获取标签的text
2. @属性 获取属性的值
3. extract()查找多个 extract_first() 查找一个
4. response.urljoin() url拼接
5. scrapy.Request(url=_next, callback=self.parse) 回调
"""
def parse(self, response):
# print(response.text)
quotes = response.xpath('//div[@class="col-md-8"]/div[@class="quote"]')
# print(quotes)''
for quote in quotes:
print('=' * 20)
# print(quote)
# extract_first() 查找一个
text = quote.xpath('.//span[@class="text"]/text()').extract_first()
print(text)
author = quote.xpath('.//span/small[@class="author"]/text()').extract_first()
print(author)
# extract()查找多个
tags = quote.xpath('.//div[@class="tags"]/a[@class="tag"]/@href').extract()
print(tags)
print('>' * 40)
next_url = response.xpath('//div[@class="col-md-8"]/nav/ul[@class="pager"]/li[@class="next"]/a/@href').extract_first()
print(next_url)
# 拼接url
_next = response.urljoin(next_url)
print(_next)
# callback 回调函数
yield scrapy.Request(url=_next, callback=self.parse)

补充

from scrapy import Spider, FormRequest
FormRequest(ulr= '', callback='', formdata='')

最新文章

  1. 关于Go,你可能不注意的7件事(转的)
  2. gulp学习笔记--简单入门
  3. 游戏服务器端引擎--DogSE的设计
  4. gradlew常用命令
  5. Android开发--Activity的创建
  6. 转载 网页打印时设置A4大小
  7. SqlDataReader对象的NextResult方法读取存储过程多个结果集
  8. ios 应用剖析
  9. JS 日期工具类-基于yDate
  10. CrystalDiskMark 的使用方法
  11. VC下载文件显示进度条
  12. Java RTTI和反射
  13. Ubuntu设置环境变量的几种方法
  14. DataGridView显示数据的两种方法
  15. 用Collections.synchronizedCollection创建线程安全的集合、列表。。。
  16. 移动端H5地图矢量SHP网格切分打包方案
  17. Android 网页打开app(或者打开指定页面)并且接收参数
  18. python学习:输入中文
  19. c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
  20. jmeter4.0测试dubbo接口遇到的问题:An error occurred: org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class

热门文章

  1. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(9)之系统登录
  2. vue-learning:41 - Vuex - 第二篇:const store = new Vue.Store(option)中option选项、store实例对象的属性和方法
  3. Spring Boot 各Starter介绍
  4. ie6,7不支持display:inline-block;
  5. 阿里云基于OSS的云上统一数据保护方案2.0正式发布
  6. 小心Powershell的位数
  7. Oracle Net Manager 的使用方法(监听的配置方法)
  8. sed & awk & grep 专题
  9. Vue通讯
  10. 【他山之石】mysql编码问题总结