×

用Python写网络爬虫的PDF电子书免费下载

消耗积分:2 | 格式:pdf | 大小:9.87 MB | 2019-07-05

qin_天

分享资料个

  本书讲解 了 如何使用Python 来编写网络爬虫程序 , 内 容包括 网络爬虫简介 , 从页面 中 抓取数据 的三种方法 , 提取缓存 中 的 数据 , 使用 多 个线程和进程来进行并发抓取 , 如何抓取动态页面 中 的 内 容 , 与表单进行交互 , 处理页面 中 的 验证码 问 题, 以及使用 Sca rpy 和 Portia 来进行数据抓取 , 并在最后使用 本书介绍 的 数据抓取技术对几个真实 的 网 站进行 了 抓取 , 旨在帮 助读者活学活用书中介绍 的技术 。本书适合有一定Python 编程经验 , 而且对爬虫技术感兴趣的读者阅读 。

  互联网 包含了迄今为止最有用的数据集, 并且大部分可以免费公开访问。但是, 这些数据难以复用。 它们被嵌入在网 站的结构和样式当中, 需要抽取出来才能使用。 从网 页中抽取数据的过程又被称为网 络爬虫。 随着越来越多的信息被发布到网 络上, 网 络爬虫也变得越来越有用。

 

  本书内容

  第1章, 网 络爬虫简介, 介绍了网 络爬虫, 并讲解了爬取网站 的方法。

  第2章, 数据抓取,展示了如何从网 页中抽取数据。

  第3章, 下载缓存, 学习了如何通过缓存结果避免重复下载的问题。

  第4章, 并发下载, 通过并行下载加速数据抓 取。

  第5章, 动态内容, 展示了如何从动态网 站中抽取数据。

  第6章, 表单交互, 展示了如何与 表单进行交互, 从而访问你需要的数据。

  第7章, 验证码处理, 阐述了如何访问被验证码图像保护的数据。

  第8章, Scrapy, 学习了如何使用流行的高级框架 Scrapy。

  第9章, 总结, 对我们介绍的这些网 络爬虫技术进行总结。

  假 设我有一个鞋店, 并且想要及时了解竞争对手的价格。 我可以每天访问他们的网 站 , 与 我店铺中鞋子的价格进行对比。但是, 如果我店铺中的鞋类品种繁多,或是希望 能够更加频繁地查看价格变化的话, 就需要花费大量的时间, 甚至难以实现。 再举一个例 子, 我看中了一双鞋, 想等它促销时再购买。我可能需要每天访问这家鞋店的网 站 来查看这双鞋是否降价, 也许需要等待几个月的时间, 我才能如愿盼到这双鞋促销。 上述这两个重复性的手工流程,都可以利用本书介绍的网 络爬虫技术实现自动化处理。

  理想状态下, 网 络爬虫并不是必须品,每个网站 都应该提供 API, 以结构化的格式共享它们的数据。 然而现实情况中, 虽然一些网站 已经提供了这种 API,但是它们通常会限制可以抓 取的数据,以及访问这些数据的频率。 另外,对于网站 的开发者而言, 维护前端界面比维护后端API接口优先级更高。 总之, 我们不能仅仅依赖于 API去访问我们所需的在线数据, 而是应该学习一些网 络爬虫技术的相 关知识。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'用Python写网络爬虫的PDF电子书免费下载',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);