Python Tool 101-Tool 003-Python Scrapy 爬取文本數據

Python Tool 101 - Tool 003 - Python Scrapy 爬取文本數據

環境背景:

今天還是開始python tool教程!在大數據時代我們需要獲取並處理海量數據。作為一個程序猿,獲取數據的方式當然不會手工收集,我們使用爬蟲框架獲取我們所需要的數據~~,我的技術棧中python是核心,所以選擇爬蟲框架的時候我選擇了scrapy框架。肯定會有讀者問,明明有很多現成的爬蟲工具可以使用,為啥要編程自己寫呢?其實現在很多大學生、研究生在做數據分析時從不自己寫爬蟲工具,都是用現成的,在做學術分析的時候是可以滿足一時之需,但是在真正進入工作崗位中,不可能有非常完美的工具供你使用,你想實現的東西還需動手自己設計。上百上千條數據進行挖掘分析,你用現成的工具,幾乎不會花費多少錢,但是生產實際中,數據是百萬、千萬、億級別的,企業不可能完全使用第三方工具的,所以每個人的價值取決於自己當時的選擇。

提出問題:

Python Scrapy 爬取文本數據

解決方案:

  • 爬蟲選用 scrapy框架
  • 數據庫選用 mongodb
  • 爬取豆瓣電影Top250

實際操作:

第一步:

# 安裝scrapy
python -m pip install scrapy

第二步:

# 安裝mongodb
wget http://172.16.1.150/mongo/mongodb-org-3.4.repo && \
yum makecache && \
yum -y install mongodb-org
systemctl start mongod.service
systemctl enable mongod.service

第三步:

# 設置items
vi items.py
```
import scrapy
from scrapy import Item,Field

class TutorialItem(scrapy.Item):
# 電影名
title = scrapy.Field()
# 基本信息
bd = scrapy.Field()
# 評分
star = scrapy.Field()
# 簡介
quote = scrapy.Field()
```

# 設置pipelines
vi pipelines.py

```
class TutorialPipeline(object):
def __init__(self):
conn = MongoClient('172.10.2.105', 27017)
db = conn.moves
self.post = db.Book


def process_item(self, item, spider):
bookInfo = dict(item)
print(bookInfo)
self.post.insert(bookInfo)
return item
```

# 設置spider
vi doubanspider.py
```
from scrapy.spiders import CrawlSpider
from tutorial.items import TutorialItem
import scrapy

class DoubanSpider(CrawlSpider):
name = "douban"
offset = 0
url = "https://movie.douban.com/top250?start="
start_urls = (
url + str(offset),
)

def parse(self,response):
item = TutorialItem()
movies = response.xpath('//div[@class="info"]')
print('*'*80)
print(len(movies))
for each in movies:
# 電影名
item['title'] = each.xpath('.//span[@class="title"][1]/text()').extract()[0]
# 基本信息
item['bd'] = each.xpath('.//div[@class="bd"]/p/text()').extract()[0]
# 評分
item['star'] = each.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').extract()[0]
# 簡介
quote = each.xpath('.//p[@class="quote"]/span/text()').extract()
if len(quote) != 0:
item['quote'] = quote[0]
yield item
if self.offset < 225:
self.offset += 25

yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
```

第四步:

# 啟動爬蟲,爬取文本數據
scrapy crawl douban

第五步:

查看數據庫數據吧~~~

Python Tool 101-Tool 003-Python Scrapy 爬取文本數據

Python Tool 101-Tool 003-Python Scrapy 爬取文本數據


分享到:


相關文章: