scrapy爬虫 简单入门
2024-09-02 08:35:49
1. 使用cmd+R命令进入命令行窗口,并进入你需要创建项目的目录
cd 项目地址
2. 创建项目
scrapy startproject <项目名>
cd <项目名>
例如
scrapy startproject quote
cd quote
3. 编写item.py文件(定义需要爬取的文件)
import scrapy
class QuoteItem(scrapy.Item):
# define the fields for your item here like:
text = scrapy.Field()
author = scrapy.Field()
tags = scrapy.Field()
4. 创建爬虫文件
scrapy genspider <爬虫文件名> <域名>
例如
scrapy genspider myspider quotes.toscrape.com
5. 编写myspider.py文件
import scrapy
from quote.items import QuoteItem
class MyspiderSpider(scrapy.Spider):
name = 'myspider'
allowed_domains = ['quotes.toscrape.com']
start_urls = ['http://quotes.toscrape.com/']
def parse(self, response):
for each in response.xpath('//div[@class="quote"]'):
item = QuoteItem()
item['text'] = each.xpath('./span/text()').extract()[0]
item['author'] = each.xpath('.//small/text()').extract()[0]
list = each.xpath('.//a[@class="tag"]/text()').extract()
#列表形式的文件不能存入mysql,需要弄成str形式
item['tags']= '/'.join(list)
yield item
next = response.xpath('//li[@class="next"]/a/@href').extract()[0]
url = response.urljoin(next)
yield scrapy.Request(url=url,callback=self.parse)
6. 编写pipelines.py(如果需要存入到数据库)
import pymysql.cursors
class QuotePipeline(object):
def __init__(self):
self.connect = pymysql.connect(
host='localhost',
user='root',
password='',
database='quotes',
charset='utf8',
)
self.cursor = self.connect.cursor()
def process_item(self, item, spider):
item = dict(item)
sql = 'insert into quote(text,author,tags) values(%s,%s,%s)'
self.cursor.execute(sql,(item['text'],item['author'],item['tags']))
self.connect.commit()
return item
def close_spider(self,spider):
self.cursor.close()
self.connect.close()
7. 修改setting.py文件
ROBOTSTXT_OBEY = True
8. 运行
scrapy crawl myspider
9. 保存为csv文件
scrapy crawl quotes –o quotes.csv
参考资料
https://www.cnblogs.com/shuimohei/p/10491833.html
https://blog.csdn.net/ck784101777/article/details/104468780/
最新文章
- DBCC CHECKDB 遭遇Operating system error 112(failed to retrieve text for this error. Reason: 15105) encountered
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
- .Net框架2.0和4.0版本对比
- Delphi连接Oracle控件ODAC的安装及使用(轉載)
- C++ 以费波纳茨数列为权重的加权均值计算方法 wMA
- express-19 路由2
- 移动App的REST API设计实践
- cocos2dx的lua绑定
- 56. 2种方法判断二叉树是不是平衡二叉树[is balanced tree]
- Dijkstra(迪杰斯特拉)源最短路径 小白说明
- poj 1733(带权并查集+离散化)
- handler.post(r)同一个线程的疑惑
- [Ioi2007]Miners 矿工配餐(BZOJ1806)
- C++vptr初始化时间
- mac sourcetree启用外部合并工具(beyond compare)
- .net webapi 后台导出excel 申请付款单实例
- 标记化结构初始化语法 在结构体成员前加上小数点 如 “.open .write .close ”C99编译器 .
- 多线程场景下如何使用 ArrayList
- python 函数式编程:高阶函数,map/reduce
- Android指纹识别API讲解,让你有更好的用户体验
热门文章
- pdf2swf 和pdf2html 使用命令详解
- 解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
- 30天自制操作系统-day1
- Yaml spring boot 二维数组写法
- Android基本组件TextView和EditView
- 基于jupyter lab搭建网页编程环境并添加自定义python kernel和matlab kernel以及plotly的使用
- JAVA_基础IO流随机存取文件流(四)
- DAS、SAN和NAS三种服务器存储方式 (转)
- Let&#39;s Encrypt SSL证书申请
- Spring Boot -- 外部配置的属性使用