问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求助一个python程序,要求能把爬虫数据输入到mongodb库里面,爬什么数据都行

发布网友 发布时间:2022-04-30 20:13

我来回答

4个回答

懂视网 时间:2022-05-01 00:34

,这个在爬到的报文解析就很蛋碎,

因为http中间件对utf-8支持的比较好,所以针对这一点我们需要对于gb2312的网站做编码转换处理

 

这里我使用了mongoose,所以node执行js会先链接test数据库

这里爬了百度阅读的数据,但是爬下来的图片链接在本地网页是不能使用的,百度图片服务器做了请求筛选

代码如下:

/**
 * Created by Myco on 2016/3/15.
 */
/*
* iconv-lite 模块能配合 http 模块以及 request 模块使用,却不能直接和 superAgent 模块使用。
* 因为 superAgent 是以 utf8 去取数据,然后再用 iconv 转也是不行的。
* 页面是 gbk 编码的,sres.text 已经是 decode 过了的结果,
* 也就是说它已经被转换成 utf8 了,再转换成 buffer 出来的结果必须是不正确的。
*/

var http = require(‘http‘);
//提供jquery的功能进行dom节点操作
var cheerio = require(‘cheerio‘);
var mongoose = require(‘mongoose‘);
//纯Javascript转换编码的模块 iconv-lite
var iconv = require(‘iconv-lite‘);
//bufferhelper是一个操作buffer的加强类
var Bufferhelper =require(‘bufferhelper‘);
//当前为mongon的表结构实例对象
var BookModel = require(‘../models/model/bookModel‘);
//创建一个数据库连接
mongoose.connect(‘mongodb://localhost/test‘);
//设置访问地址,百度是gb2312编码的数据,所以必须使用iconv.decode
var url = ‘http://yuedu.baidu.com/‘

http.get(url,function(res){
 var bufferhelper =new Bufferhelper();
 res.on(‘data‘,function(data){
//返回的都是Buffer数据 console.log(‘------------下载中‘+Buffer.isBuffer(data)+‘-------------‘); bufferhelper.concat(data); }); res.on(‘end‘,function(){ console.log(‘------------结束-------------‘); var html = iconv.decode(bufferhelper.toBuffer(),‘GBK‘); filtehtml(html); }); }).on(‘error‘,function(){ console.log(‘获取数据失败!‘); }) //html文档过滤出有效信息 function filtehtml(html){ //cheerio本身默认是转实体的,所以保证转换成功必须加参数{decodeEntities: false},和编码无关 var $ = cheerio.load(html,{decodeEntities: false}); var collist= $(‘.yd-reco-wrap‘); console.log(‘------------数据收集-------------‘); console.log(‘------------collist数据长度:‘+collist.length+‘-------------‘); var data = []; for(var i= 0,l=collist.length;i<l;i++){ var docObj= $(collist[i]); var item = {}; item.bookColName = docObj.find(‘.mod-title‘).text(); item.categoryId = 999999; var listObj = docObj.find(‘.book‘); var booklist = []; for(var q= 0,ql=listObj.length;q<ql;q++){ var bookObj = $(listObj[q]); var bookData = {}; bookData.title = bookObj.find(‘.book-title‘).text(); bookData.currentPrice = bookObj.find(‘.book-price‘).text().replace(‘¥‘,‘‘); bookData.src = bookObj.find(‘.book-cover .book-img‘)[0].attribs[‘data-src‘]; bookData.author = bookObj.find(‘.book-card-author‘).text(); var url = bookObj.find(‘.book-card-wrap‘)[0].attribs.href; if(url){ bookData.id = url.replace(//ebook/|?fr=index/g,‘‘); bookData.url = url; } add(bookData); booklist.push(bookData); } item.booklist = booklist; data.push(item); } } function add(bookData){ if(bookData.url){ http.get(‘http://yuedu.baidu.com/‘+bookData.url,function(res){ var bufferhelper =new Bufferhelper(); res.on(‘data‘,function(data){ bufferhelper.concat(data); }); res.on(‘end‘,function(){var html = iconv.decode(bufferhelper.toBuffer(),‘GBK‘); console.log(html); var $ = cheerio.load(html,{decodeEntities: false}); var content = $(‘#bd .main .scaling-content p‘).text(); console.log(content); }); }).on(‘error‘,function(){ console.log(‘获取数据失败!‘); }) } }
bookModel.js文件如下,实例化了mongondb表结构,并为表取名book(代码中引入了bookSchema.js文件,若使用如下代码,请注意js文件路径)
var mongoose = require(‘mongoose‘);
var bookSchema = require(‘../schema/bookSchema.js‘);
//指定数据库表名称为book
var BookModel = mongoose.model(‘book‘,bookSchema,‘book‘);

module.exports = BookModel;
bookSchema.js 文件如下,主要是Schema定义mongondb的数据表结构和默认值
var mongoose = require(‘mongoose‘);

var bookSchema = new mongoose.Schema({
 id:String,
 src:String,//图片地址
 title:{type:String,required:true},//书名,添加姓名非空约束
 content:String,//内容
 author:String,//作者
 rq:{type:Number,default:0},//阅读量
 price:{type:Number,min:0,max:1000},//价格,添加价格约束
 isShow:{type:Boolean,default:true},//约束是否显示
 classify:{type:String,enum:[‘青春‘,‘文学‘,‘历史‘,‘科幻‘,‘小说‘,‘言情‘,‘军事‘],default:‘青春‘},//类型,枚举限定类型
 currentPrice:{type:Number,default:0},//当前售价
 comments_count:{type:Number,default:0},//评论数
 meta:{//object类型时间对象
 createDate:{
  type:Date,
  default:Date.now()
 },
 updateDate:{
  type:Date,
  default:Date.now()
 }
 }
},{versionKey:false});
module.exports = bookSchema;

 

使用node的http模块实现爬虫功能,并把爬到的数据存入mongondb

标签:

热心网友 时间:2022-04-30 21:42

# coding=utf-8
 
import re
import requests
from lxml import etree
import pymongo
import sys
 
reload(sys)
sys.setdefaultencoding('utf-8')
 
def getpages(url, total):
  nowpage = int(re.search('(\d+)', url, re.S).group(1))
  urls = []
 
  for i in range(nowpage, total + 1):
    link = re.sub('(\d+)', '%s' % i, url, re.S)
    urls.append(link)
 
  return urls
 
def spider(url):
  html = requests.get(url)
 
  selector = etree.HTML(html.text)
 
  book_name = selector.xpath('//*[@id="container"]/ul/li//div/div[2]/a/text()')
  book_author = selector.xpath('//*[@id="container"]/ul/li//div/div[2]/div/a/text()')
 
  saveinfo(book_name, book_author)
 
def saveinfo(book_name, book_author):
  connection = pymongo.MongoClient()
  BookDB = connection.BookDB
  BookTable = BookDB.books
 
  length = len(book_name)
 
  for i in range(0, length):
    books = {}
    books['name'] = str(book_name[i]).replace('\n','')
    books['author'] = str(book_author[i]).replace('\n','')
    BookTable.insert_one(books)
 
if __name__ == '__main__':
  url = 'http://readfree.me/shuffle/?page=1'
  urls = getpages(url,3)
 
  for each in urls:
    spider(each)

热心网友 时间:2022-04-30 23:00

不要在百度求代码,去github.com, 以 python spider mongodb 或者 python 爬虫 mongodb 作为关键字搜。

热心网友 时间:2022-05-01 00:35

自己看着办啊
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
华为freebuds4i切歌怎么操作_华为freebuds4i怎么切歌 华为freebuds pro切歌方法_华为freebuds pro怎么切歌 华为耳机怎么切换下一曲 欧美电影,好像是宠物有一个世界,宠物会想办法跟主人的灵魂互换占据 ...的名字,欧洲中世纪,一个王子的继母把他的灵魂和狗的灵魂互换了... 问一部外国电影的名字 剧情记得不大清楚l了 是前几年的片子 灵魂互换的... HUAWEI 华为 AGS2-W09 10.1英寸平板电脑 (香槟金、64GB+4GB、WiFi版... 诛仙3百法和千法差距大吗 微信怎么解除应用授权登录 授权应用删除方法 微信怎么解除应用授权登录授权应用删除方法 以燕鱼为主,有什么小型群游鱼适合和燕混养? 农商银行和农村信用社是不是一个 农村信用社跟农商银行是同一个银行吗 想养一种小型群游性的观赏鱼 通体橙色红色的最好 好样一点的喂饲料就行 求各位多推荐几种 农村信用社和农商银行有什么区别? 中国有什么好看的鱼 45*24*25的鱼缸装满水能养些什么鱼呢,想养些小的群游的鱼,再配2条稍微大点的,给介绍下吧 第一次养鱼, 蓝吊属于群游鱼? 青魔鱼多少只可以群游 关于本科学前教育毕业论文 6000 农商行和农村信用社的区别有哪些? 群游的热带观赏鱼有什么品种 什么观赏鱼小型而又可以群游 关于教育类开题报告的可行性分析 该怎么写啊 小型群游鱼那个最皮实 因为没有过滤。是要填在斗鱼缸里的。五条左右。因为只有一只半月母斗鱼 尾 我想找外研版小学全套免费的mp3音频,请问哪里可以找到? 教育类论文开题报告里的理论意义和实践意义怎么写 陕西养老保险个人版怎样给其他城镇职工养老保险人员认证? 小米手机自带软件 &#xF449;音乐 怎么把存在手机里的歌曲 添加播放 企业职工养老保险资格核验怎么操作 推荐几种中型和小型能混养的鱼,谢谢 请问企业应怎么选择OA系统呢?OA办公系统选型有哪些要素? 那种小型观赏鱼喜欢群游??? 六年级下册英语大册子里夹的试卷的答案 2018-2019学年度上期小学六年级英语期末综合素质测评试题及答案 80的水族箱养什么鱼比较合适 养多少 小学六年级语文数学英语的毕业考的试卷及答案 小学六年级英语单元测试卷答案 1米5的草缸40CM的宽度66CM的高能养多少鱼,例如红绿灯这些小的灯科鱼,草是低矮的草,请高手赐教 六年级下册英语试卷随堂大考卷的答案 小学六年级下册毕业会考语文,数学和英语试卷及答案,急...................................有试卷的回答 六年级下册英语试卷答案人教版 江苏六年级英语下册亮点激活大试卷答案 手机为什么不能获取root权限?(手机型号vivo y27) 2008学年小学六年级英语期末测试卷答案!急!! 怎么不可以获得Root 我的手机怎么不能获取root权限啊!vivo y11 食品专业的就业单位有哪些 食品质量与安全专业就业岗位 食品专业就业基本都做什么工作