windows下使用python的scrapy爬蟲框架,爬取個人博客文章內容信息


scrapy作為流行的python爬蟲框架,簡單易用,這里簡單介紹如何使用該爬蟲框架爬取個人博客信息。關於python的安裝和scrapy的安裝配置請讀者自行查閱相關資料,或者也可以關注我后續的內容。
 
本文使用的python版本為2.7.9  scrapy版本為0.14.3 
 
1.假設我們爬蟲的名字為vpoetblog
  在命令行下切換到桌面目錄,輸入startproject scrapy vpoetblog 如下圖所示:
 
 命令執行成功后會在桌面生成一個名為vpoetblog的文件夾
該文件夾的目錄為:
 scrapy.cfg  └─vpoetblog  items.py  pipelines.py  settings.py  __init__.py  └─spiders __init__.py
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
這里我們要新建一些文件,最終的目錄結構如下:
 scrapy.cfg │ data.txt //用於保存抓取到的數據 └─doubanmoive  items.py //用於定義抓取的item  pipelines.py //用於將抓取的數據進行保存  settings.py  __init__.py  └─spiders
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
 blog_spider.py //主爬蟲函數 用於定義抓取規則等 __init__.py 
  • 1
  • 2
items.py內容如下:
[python]  view plain  copy
 
  1. # -*- coding: cp936 -*-  
  2. from scrapy.item import Item, Field  
  3.   
  4. class VpoetblogItem(Item):  
  5.     # define the fields for your item here like:  
  6.     # name = Field()  
  7.     article_name = Field() #文章名字  
  8.     public_time = Field()  #發表時間  
  9.     read_num = Field()     #閱讀數量  


pipelines.py內容如下:
[python]  view plain  copy
 
  1. # -*- coding: utf-8 -*-  
  2. import sys  
  3. reload(sys)  
  4. sys.setdefaultencoding('utf-8')  
  5. from scrapy.exceptions import DropItem  
  6. from scrapy.conf import settings  
  7. from scrapy import log  
  8.   
  9. class Pipeline(object):  
  10.     def __init__(self):  
  11.         print 'abc'  
  12.   
  13.     def process_item(self, item, spider):  
  14.         #Remove invalid data  
  15.         #valid = True  
  16.         #for data in item:  
  17.           #if not data:  
  18.             #valid = False  
  19.             #raise DropItem("Missing %s of blogpost from %s" %(data, item['url']))  
  20.             #print 'crawl no data.....\n'  
  21.         #if valid:  
  22.         #Insert data into txt  
  23.         input = open('data.txt', 'a')  
  24.         input.write('article_name:'+item['article_name'][0]+'   ');  
  25.         input.write('public_time:'+item['public_time'][0]+'   ');  
  26.         input.write('read_num:'+item['read_num'][0]+'   ');  
  27.         input.close()  
  28.   
  29.         return item  


settings.py內容如下:
[python]  view plain  copy
 
  1. # Scrapy settings for vpoetblog project  
  2. #  
  3. # For simplicity, this file contains only the most important settings by  
  4. # default. All the other settings are documented here:  
  5. #  
  6. #     http://doc.scrapy.org/topics/settings.html  
  7. #  
  8.   
  9. BOT_NAME = 'vpoetblog'  
  10. BOT_VERSION = '1.0'  
  11.   
  12. SPIDER_MODULES = ['vpoetblog.spiders']  
  13. NEWSPIDER_MODULE = 'vpoetblog.spiders'  
  14.   
  15. ITEM_PIPELINES={  
  16.     'vpoetblog.pipelines.Pipeline':300  
  17. }  
  18.   
  19.   
  20. DOWNLOAD_DELAY = 2  
  21. RANDOMIZE_DOWNLOAD_DELAY = True  
  22. USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.54 Safari/536.5'  
  23. COOKIES_ENABLED = True  
blog_spider.py內容如下:
[python]  view plain  copy
 
  1. # -*- coding: utf-8 -*-  
  2. from scrapy.selector import HtmlXPathSelector  
  3. from scrapy.contrib.spiders import CrawlSpider,Rule  
  4. from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor  
  5. from vpoetblog.items import VpoetblogItem  
  6.   
  7. class MoiveSpider(CrawlSpider):  
  8.     name="vpoetblog"  
  9.     allowed_domains=["blog.csdn.net"]  
  10.     start_urls=["http://blog.csdn.net/u013018721/article/list/1"]  
  11.   
  12.     rules=[  
  13.         Rule(SgmlLinkExtractor(allow=(r'http://blog.csdn.net/u013018721/article/list/\d+'))),  
  14.         Rule(SgmlLinkExtractor(allow=(r'http://blog.csdn.net/u013018721/article/details/\d+')),callback="parse_item"),        
  15.     ]  
  16.   
  17.     def parse_item(self,response):  
  18.         sel=HtmlXPathSelector(response)  
  19.         item=VpoetblogItem()  
  20.         item['article_name']=sel.select('//*[@class="link_title"]/a/text()').extract()  
  21.         item['public_time']=sel.select('//*[@class="link_postdate"]/text()').extract()  
  22.         item['read_num']=sel.select('//*[@class="link_view"]/text()').extract()  
  23.   
  24.         return item  



運行命令如下:
 
運行截圖如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM