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


第五步:

查看数据库数据吧~~~