Scrapy的基本使用
2024-09-06 17:25:28
爬取: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='')
最新文章
- 关于Go,你可能不注意的7件事(转的)
- gulp学习笔记--简单入门
- 游戏服务器端引擎--DogSE的设计
- gradlew常用命令
- Android开发--Activity的创建
- 转载 网页打印时设置A4大小
- SqlDataReader对象的NextResult方法读取存储过程多个结果集
- ios 应用剖析
- JS 日期工具类-基于yDate
- CrystalDiskMark 的使用方法
- VC下载文件显示进度条
- Java RTTI和反射
- Ubuntu设置环境变量的几种方法
- DataGridView显示数据的两种方法
- 用Collections.synchronizedCollection创建线程安全的集合、列表。。。
- 移动端H5地图矢量SHP网格切分打包方案
- Android 网页打开app(或者打开指定页面)并且接收参数
- python学习:输入中文
- c/c++ 图的最短路径 Dijkstra(迪杰斯特拉)算法
- jmeter4.0测试dubbo接口遇到的问题:An error occurred: org.springframework.scheduling.quartz.CronTriggerBean has interface org.quartz.CronTrigger as super class
热门文章
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(9)之系统登录
- vue-learning:41 - Vuex - 第二篇:const store = new Vue.Store(option)中option选项、store实例对象的属性和方法
- Spring Boot 各Starter介绍
- ie6,7不支持display:inline-block;
- 阿里云基于OSS的云上统一数据保护方案2.0正式发布
- 小心Powershell的位数
- Oracle Net Manager 的使用方法(监听的配置方法)
- sed &; awk &; grep 专题
- Vue通讯
- 【他山之石】mysql编码问题总结