一、运行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())