python爬蟲框架scrapy學習第五課
任務:爬取簡書30日熱門文章信息,數據存儲在MongoDB庫中
執行:爬蟲操作及數據存儲
安裝mongdb
-
下載mongodb安裝包。由於嘗試官網下載一直失敗,故從該mongodb下載鏈接 處下載安裝包。
-
參照mongoDB入門與安裝進行安裝。這裏需要注意的是msi文件安裝完成後,自帶data文件夾,因此不需要額外新建數據存放目錄。
-
以管理員身份啓動mongodb服務。注意執行net start mongodb一定是在管理員身份下運行cmd/powershell,否則會出現沒有訪問權限/訪問被拒絕的錯誤。
python 連接mongodb驅動PyMongo
- 安裝PyMongo需執行如下命令
pip install pymongo
- 在python文件需要連接mongodb處,導入
import pymongo
爬蟲實例
- 具體爬蟲文件——jian.py
# -*- coding: utf-8 -*-
import scrapy
from JianShu.items import JianshuItem
class JianSpider(scrapy.Spider):
name = 'jian'
allowed_domains = ['www.jianshu.com']
start_urls = ('https://www.jianshu.com/trending/monthly?utm_medium=index-banner-s&utm_source=desktop',)
def parse(self, response):
item = JianshuItem()
content = response.xpath('//div[@class="content"]')
for each in content:
item['title'] = each.xpath('./a/text()')[0].extract()
abstract = each.xpath('./p/text()')[0].extract()
abstract = abstract.replace("\n", "")
abstract = abstract.strip()
item['abstract'] = abstract
item['nickname'] = each.xpath('./div/a/text()')[0].extract()
item['link'] = "https://www.jianshu.com" + each.xpath('./a/@href')[0].extract()
yield item
import scrapy
class JianshuItem(scrapy.Item):
#文章標題
title = scrapy.Field()
#摘要
abstract = scrapy.Field()
#作者
nickname = scrapy.Field()
#文章鏈接
link = scrapy.Field()
import pymongo
from scrapy.conf import settings
class JianshuPipeline(object):
def __init__(self):
#主機
host = settings["MONGODB_HOST"]
#端口
port = settings["MONGODB_PORT"]
#數據庫名
dbname = settings["MONGODB_DBNAME"]
#數據表
sheetname = settings["MONGODB_SHEETNAME"]
#創建MONGODB數據庫
client = pymongo.MongoClient(host=host, port=port)
#指定數據庫
mydb = client[dbname]
#指定數據表
self.post = mydb[sheetname]
def process_item(self, item, spider):
data = dict(item)
self.post.insert(data)
return item
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;'
ITEM_PIPELINES={
'JianShu.pipelines.JianshuPipeline':300
}
MONGODB_HOST = "127.0.0.1"
MONGODB_PORT = 27017
MONGODB_DBNAME = "jianshu"
MONGODB_SHEETNAME = "jianshuPaper"
結果:爬取結果展示
爬取到的數據存儲在mongodb數據庫中,查看新建的數數據庫“jianshu”,數據表“jianshuPaper”和表內容是否存在,具體操作如下。
-
連接數據庫
-
查看已有數據庫
-
查看庫jianshu的表
-
查看錶jianshuPaper內容
問題總結
DEBUG: Crawled (403) XXX
解決:settings.py文件中增加如下代理
USER_AGENT = ‘Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;’