The first scrapy project
第一个爬虫项目
创建项目
在开始爬取之前,必须创建一个新的Scrapy项目。
scrapy startproject ielts_online_spider
制作爬虫
生成一个爬虫
scrapy genspider ielts_online "ieltsonlinetests.com"
将start_urls的值修改为需要爬取的第一个url
start_urls = ['https://ieltsonlinetests.com/ielts-recent-actual-test-answers-vol-6-reading-practice-test-1/solution']
修改parse()方法
def parse(self, response):
filename = "reading_page1.html"
open(filename, 'w').write(str(response.body))
然后运行一下看看,在mySpider目录下执行:
scrapy crawl ielts_online
查看HTML文件可以看到已经写出
取爬虫数据
构建自己的spider存储对象
打开mySpider目录下的items.py
Item 定义结构化数据字段,用来保存爬取到的数据,有点像Python中的dict,但是提供了一些额外的保护减少错误。
可以通过创建一个 scrapy.Item 类, 并且定义类型为 scrapy.Field的类属性来定义一个Item(可以理解成类似于ORM的映射关系)。
接下来,创建一个ItcastItem 类,和构建item模型(model)。
class ArticalItem(scrapy.Item):
title = scrapy.Field()
content = scrapy.Field()
取数据
取出所有的文章,然后遍历逐步的写入到文章的内容中去
# -*- coding: utf-8 -*-
import scrapy
from ieltsOnlineSprider.items import ArticalItem
class IeltsOnlineSpider(scrapy.Spider):
name = 'ielts_online'
allowed_domains = ['ieltsonlinetests.com']
start_urls = ['https://ieltsonlinetests.com/ielts-recent-actual-test-answers-vol-6-reading-practice-test-1/solution']
def parse(self, response):
items = []
for each in response.xpath('//*[@id="slpit-two"]/div[1]/div'):
item = ArticalItem()
title = each.xpath('h2/text()').extract()
content = each.xpath('div[3]').extract()
item['title'] = title
item['content'] = content
items.append(item)
return items
执行测试
直接使用returns的时候,可以将return的内容写到不同的类型的文件中去。
# json格式,默认为Unicode编码
scrapy crawl ielts_online -o reading_page1.json
# json lines格式,默认为Unicode编码
scrapy crawl ielts_online -o reading_page1.jsonl
# csv 逗号表达式,可用Excel打开
scrapy crawl ielts_online -o reading_page1.csv
# xml格式
scrapy crawl ielts_online -o reading_page1.xml
Last updated
Was this helpful?