一、运行F:\Anaconda\Scripts\scrapy startproject scrapy_test生成scrapy项目的默认结构
其中:
crapy.cfg: 项目的配置文件。
scrapy_test/: 该项目的python模块。之后您将在此加入代码。
scrapy_test/items.py: 项目中的item文件。
scrapy_test/pipelines.py: 项目中的pipelines文件。
scrapy_test/settings.py: 项目的设置文件。
scrapy_test/spiders/: 放置spider代码的目录
二、在项目目录下执行scrapy genspider tablespider(爬虫名)www.apache.org(域名)生成spider.py爬虫文件
三、设置Items.py
Items是将要装载抓取的数据的容器,它工作方式像python里面的字典
import scrapy
class ScriptTestItem(scrapy.Item):
name=scrapy.Field()
url=scrapy.Field()
四、spider代码
Spider是我们的主爬虫类
# -*- coding: utf-8 -*-
import scrapy
from scrapy.selector import HtmlXPathSelector
from script_test.items import ScriptTestItem
class TablespiderSpider(scrapy.Spider):
name = 'tablespider'
allowed_domains = ['www.apache.org']
start_urls = ['http://www.apache.org/']
# 在这里我们重写了start_requests函数
# 从start_urls中读取链接,然后使用make_requests_from_url生成Request
def start_requests(self):
#将url改为http://www.apache.org/dist/
self.start_urls[0]=self.start_urls[0]+'dist/'
for url in self.start_urls:
yield self.make_requests_from_url(url)
# 生成了请求后,scrapy会帮我们处理Request请求,然后获得请求的url的网站的响应response,parse就可以用来处理response的内容
def parse(self, response):
hxs = HtmlXPathSelector(response)
#每个select()调用返回一个selectors列表,所以我们可以结合select()去挖掘更深的节点
links=hxs.select('//pre')
items = []
for link in links:
#将抓取的数据存放到Item对象中
item=ScriptTestItem()
item['name']=link.select('a/text()').extract()
item['url']=link.select('a/@href').extract()
items.append(item)
return items
Scrapy 使用一种基于 XPath表达式的 XPath selectors机制
XPathSelector 类:HtmlXPathSelector (HTML数据解析) 和XmlXPathSelector (XML数据解析)
通过一个 Response 对象对他们进行实例化操作
Selectors 有三种方法
·path():返回selectors列表, 每一个select表示一个xpath参数表达式选择的节点.
·extract():返回一个unicode字符串,该字符串为XPath选择器返回的数据
·re(): 返回unicode字符串列表,字符串作为参数由正则表达式提取出来
五、begin.py
在本项目中,若想要执行爬虫程序需要在命令行输入scrapy crawl tablespider
为了方便使用,我们新建begin.py在项目跟目录上
位置和内容如下
#coding=utf-8
from scrapy import cmdline
cmdline.execute("scrapy crawl tablespider".split())