当前位置: 首页 > news >正文

普通网站可以做商城/哈尔滨seo推广

普通网站可以做商城,哈尔滨seo推广,山东网站策划怎么做,一览英才网scrapy是用python写的一个库,使用它可以方便的抓取网页。 主页地址http://scrapy.org/ 文档 http://doc.scrapy.org/en/latest/index.html 安装 sudo pip install scrapy 一个简单的教程 http://doc.scrapy.org/en/latest/intro/tutorial.html 如果你对这些概念有了…

scrapy是用python写的一个库,使用它可以方便的抓取网页。

主页地址http://scrapy.org/

文档 http://doc.scrapy.org/en/latest/index.html

安装 sudo pip install scrapy

一个简单的教程 http://doc.scrapy.org/en/latest/intro/tutorial.html

如果你对这些概念有了解,使用上面的教程会比较容易. 它们是json, xpath, 正则表达式, 

生成项目

scrapy提供一个工具来生成项目,生成的项目中预置了一些文件,用户需要在这些文件中添加自己的代码。

打开命令行,执行:scrapy startproject tutorial,生成的项目类似下面的结构

复制代码
tutorial/scrapy.cfgtutorial/__init__.pyitems.pypipelines.pysettings.pyspiders/__init__.py...
复制代码

scrapy.cfg是项目的配置文件

用户自己写的spider要放在spiders目录下面,一个spider类似

复制代码
from scrapy.spider import BaseSpiderclass DmozSpider(BaseSpider):name = "dmoz"allowed_domains = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):filename = response.url.split("/")[-2]open(filename, 'wb').write(response.body)
复制代码

name属性很重要,不同spider不能使用相同的name

start_urls是spider抓取网页的起始点,可以包括多个url

parse方法是spider抓到一个网页以后默认调用的callback,避免使用这个名字来定义自己的方法。

当spider拿到url的内容以后,会调用parse方法,并且传递一个response参数给它,response包含了抓到的网页的内容,在parse方法里,你可以从抓到的网页里面解析数据。上面的代码只是简单地把网页内容保存到文件。

 

开始抓取

你可以打开命令行,进入生成的项目根目录tutorial/,执行 scrapy crawl dmoz, dmoz是spider的name。

 

解析网页内容

scrapy提供了方便的办法从网页中解析数据,这需要使用到HtmlXPathSelector

复制代码
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelectorclass DmozSpider(BaseSpider):name = "dmoz"allowed_domains = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):hxs = HtmlXPathSelector(response)sites = hxs.select('//ul/li')for site in sites:title = site.select('a/text()').extract()link = site.select('a/@href').extract()desc = site.select('text()').extract()print title, link, desc
复制代码

HtmlXPathSelector使用了Xpath来解析数据

//ul/li表示选择所有的ul标签下的li标签

a/@href表示选择所有a标签的href属性

a/text()表示选择a标签文本

a[@href="abc"]表示选择所有href属性是abc的a标签

我们可以把解析出来的数据保存在一个scrapy可以使用的对象中,然后scrapy可以帮助我们把这些对象保存起来,而不用我们自己把这些数据存到文件中。我们需要在items.py中添加一些类,这些类用来描述我们要保存的数据

from scrapy.item import Item, Fieldclass DmozItem(Item):title = Field()link = Field()desc = Field()

然后在spider的parse方法中,我们把解析出来的数据保存在DomzItem对象中。

复制代码
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelectorfrom tutorial.items import DmozItemclass DmozSpider(BaseSpider):name = "dmoz"allowed_domains = ["dmoz.org"]start_urls = ["http://www.dmoz.org/Computers/Programming/Languages/Python/Books/","http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/"]def parse(self, response):hxs = HtmlXPathSelector(response)sites = hxs.select('//ul/li')items = []for site in sites:item = DmozItem()item['title'] = site.select('a/text()').extract()item['link'] = site.select('a/@href').extract()item['desc'] = site.select('text()').extract()items.append(item)return items
复制代码

在命令行执行scrapy的时候,我们可以加两个参数,让scrapy把parse方法返回的items输出到json文件中

scrapy crawl dmoz -o items.json -t json

items.json会被放在项目的根目录

 

让scrapy自动抓取网页上的所有链接

上面的示例中scrapy只抓取了start_urls里面的两个url的内容,但是通常我们想实现的是scrapy自动发现一个网页上的所有链接,然后再去抓取这些链接的内容。为了实现这一点我们可以在parse方法里面提取我们需要的链接,然后构造一些Request对象,并且把他们返回,scrapy会自动的去抓取这些链接。代码类似:

复制代码
class MySpider(BaseSpider):name = 'myspider'start_urls = ('http://example.com/page1','http://example.com/page2',)def parse(self, response):# collect `item_urls`for item_url in item_urls:yield Request(url=item_url, callback=self.parse_item)def parse_item(self, response):item = MyItem()# populate `item` fieldsyield Request(url=item_details_url, meta={'item': item},callback=self.parse_details)def parse_details(self, response):item = response.meta['item']# populate more `item` fieldsreturn item
复制代码

parse是默认的callback, 它返回了一个Request列表,scrapy自动的根据这个列表抓取网页,每当抓到一个网页,就会调用parse_item,parse_item也会返回一个列表,scrapy又会根据这个列表去抓网页,并且抓到后调用parse_details

为了让这样的工作更容易,scrapy提供了另一个spider基类,利用它我们可以方便的实现自动抓取链接. 我们要用到CrawlSpider

复制代码
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractorclass MininovaSpider(CrawlSpider):name = 'mininova.org'allowed_domains = ['mininova.org']start_urls = ['http://www.mininova.org/today']rules = [Rule(SgmlLinkExtractor(allow=['/tor/\d+'])),Rule(SgmlLinkExtractor(allow=['/abc/\d+']), 'parse_torrent')]def parse_torrent(self, response):x = HtmlXPathSelector(response)torrent = TorrentItem()torrent['url'] = response.urltorrent['name'] = x.select("//h1/text()").extract()torrent['description'] = x.select("//div[@id='description']").extract()torrent['size'] = x.select("//div[@id='info-left']/p[2]/text()[2]").extract()return torrent
复制代码

相比BaseSpider,新的类多了一个rules属性,这个属性是一个列表,它可以包含多个Rule,每个Rule描述了哪些链接需要抓取,哪些不需要。这是Rule类的文档http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.contrib.spiders.Rule

这些rule可以有callback,也可以没有,当没有callback的时候,scrapy简单的follow所有这些链接.

 

pipelines.py的使用

在pipelines.py中我们可以添加一些类来过滤掉我们不想要的item,把item保存到数据库。

复制代码
from scrapy.exceptions import DropItemclass FilterWordsPipeline(object):"""A pipeline for filtering out items which contain certain words in theirdescription"""# put all words in lowercasewords_to_filter = ['politics', 'religion']def process_item(self, item, spider):for word in self.words_to_filter:if word in unicode(item['description']).lower():raise DropItem("Contains forbidden word: %s" % word)else:return item
复制代码

如果item不符合要求,那么就抛一个异常,这个item不会被输出到json文件中。

要使用pipelines,我们还需要修改settings.py

添加一行

ITEM_PIPELINES = ['dirbot.pipelines.FilterWordsPipeline']

现在执行scrapy crawl dmoz -o items.json -t json,不符合要求的item就被过滤掉了

http://www.jmfq.cn/news/5287663.html

相关文章:

  • 网站域名备案授权书/公司网站如何在百度上能搜索到
  • 工作室有专门的网站/企业推广网络营销
  • 做兼职推荐网站/百度推广app
  • 网络管理系统登录/免费seo诊断
  • 杭州知名的网站制作策略/快速提高关键词排名的软件
  • 阿里云服务起做网站/百度地址如何设置门店地址
  • 用wordpress搭建博客/上海seo培训中心
  • js做音乐网站/seo描述是什么
  • 学校网站的建设费用吗/活动营销推广方案
  • 建设网站需要什么软件/seo公司软件
  • 国外有个专门做麋鹿测试的网站/深圳seo优化公司哪家好
  • 福州网站建设哪个好/绍兴百度seo排名
  • 网站程序设置主页面/黑帽seo技术
  • 网站备案系统源码/站长工具手机综合查询
  • 做网站需要学哪些语言/品牌推广渠道
  • 漳州正规网站建设价格/免费网络推广100种方法
  • 怎么做企业销售网站/公司宣传网页怎么做
  • 设计方案翻译/邯郸网站建设优化
  • .net 网站开发视频/山东关键词快速排名
  • 正能量不良网站免费软件下载/站长工具网站查询
  • 网站建设安全性指标/个人网站设计模板
  • 三合一网站是什么/友情链接交换的意义是什么
  • app外包什么意思/商丘seo
  • 做网站用虚拟主机好吗/网络公司网站模板
  • 怎么做销售网站/搜索引擎优化的方法包括
  • 织梦网站数据库备份文件夹/短链接在线生成官网
  • 做网站推广员/百度站长电脑版
  • 建设地情网站的作用/如何创建一个网址
  • intitle 郑州网站建设/网上营销是做什么的
  • 网站开发外包合同/天津seo结算