使用工具,ubuntu,python,pycharm
一、使用pycharm創(chuàng)建項(xiàng)目:過程略
二、安裝scrapy框架
pip install Scrapy
三、創(chuàng)建scrapy項(xiàng)目:
1.創(chuàng)建爬蟲項(xiàng)目
scrapy startproject qidian
2.創(chuàng)建爬蟲,先進(jìn)入爬蟲項(xiàng)目目錄
cd qidian/
scrapy genspider book book.qidian.com
創(chuàng)建完成后項(xiàng)目目錄如下
目錄下的的book.py就是我們的爬蟲文件
四、打開book.py編寫爬蟲的代碼
1.進(jìn)入需要爬去的書的目錄,找到開始url
設(shè)置start_url:
#鬼吹燈圖書目錄
start_urls = ['https://book.qidian.com/info/53269#Catalog']
2、在創(chuàng)建項(xiàng)目的時(shí)候,篩選的url地址為:
allowed_domains = ['book.qidian.com']
打開圖書章節(jié)后發(fā)現(xiàn)章節(jié)的url如下:
# https://read.qidian.com/chapter/PNjTiyCikMo1/FzxWdm35gIE1
所以需要將read.qidian.com 加入allowed_domains 中,
allowed_domains = ['book.qidian.com', 'read.qidian.com']
剩下的就是通過xpath 獲取抓取到的內(nèi)容,提取我們需要的內(nèi)容
完整代碼如下
# -*- coding: utf-8 -*-
import scrapy
import logging
logger = logging.getLogger(__name__)
class BookSpider(scrapy.Spider):
name = 'book'
allowed_domains = ['book.qidian.com', 'read.qidian.com']
start_urls = ['https://book.qidian.com/info/53269#Catalog']
def parse(self, response):
# 獲取章節(jié)列表
li_list = response.xpath('//div[@class="volume"][2]/ul/li')
# 列表循環(huán)取出章節(jié)名稱和章節(jié)對(duì)應(yīng)的url
for li in li_list:
item = {}
# 章節(jié)名稱
item['chapter_name'] = li.xpath('./a/text()').extract_first()
# 章節(jié)url
item['chapter_url'] = li.xpath('./a/@href').extract_first()
# 獲取到的url //read.qidian.com/chapter/PNjTiyCikMo1/TpiSLsyH5Hc1
# 需要重新構(gòu)造
item['chapter_url'] = 'https:' + item['chapter_url']
# 循環(huán)抓取每個(gè)章節(jié)的內(nèi)容
if item['chapter_url'] is not None:
# meta:傳遞item數(shù)據(jù)
yield scrapy.Request(item['chapter_url'], callback=self.parse_chapter, meta={'item': item})
def parse_chapter(self, response):
item = response.meta['item']
# 獲取文章內(nèi)容
item['chapter_content'] = response.xpath('//div[@class="read-content j_readContent"]/p/text()').extract()
yield item
五、將爬去數(shù)據(jù)保存到mongodb中
1.修改setting文件
找到并打開注釋:
ITEM_PIPELINES = {
'qidain.pipelines.QidainPipeline': 300,
}
2.添加monggodb相關(guān)配置
# 主機(jī)地址
MONGODB_HOST = '127.0.0.1'
# 端口
MONGODB_PORT = 27017
# 需要保存的數(shù)據(jù)哭名字
MONGODB_DBNAME = 'qidian'
# 保存的文件名
MONGODB_DOCNAME = 'dmbj'
3.在pipelines.py文件中保存數(shù)據(jù),最終文件內(nèi)容如下
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
from scrapy.conf import settings
import pymongo
class QidainPipeline(object):
def __init__(self):
'''在__init__中配置mongodb'''
host = settings['MONGODB_HOST']
port = settings['MONGODB_PORT']
db_name = settings['MONGODB_DBNAME']
client = pymongo.MongoClient(host=host, port=port)
db = client[db_name]
self.post = db[settings['MONGODB_DOCNAME']]
def process_item(self, item, spider):
self.post.insert(item)
return item
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
