爬虫实战【2】Python博客园-获取某个博主所有文章的URL列表

首先,我们来分析一下,在博主的首页里,每个文章的标题在网页源码中是什么样子的。【插入图片,文章标题1】【插入图片,文章标题2】通过这两个图片我们可以看出,博文标题所在的标签为,并且具有class属性为"postTitle2",其href属性就指向这篇博文的地址。如下面代码所示:<aid="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_0"class="postTitle2"href="http://www.cnblogs.com/over140/p/5462580.html">【Swift2.2】iOS开发笔记(三)</a>那么,我们的思路就可以是这样的:找到所有展示博文标题的a标签,获取a标签的href属性,那么就可以得到所有文章的url列表。但是目前存在一个问题,所有的博文标题没有在同一个页面中展示出来。【插入图片,18页】可以看出,农民伯伯的文章一共有18页,每一页中存在一些文章标题和摘要,那么我们就要遍历这18页...

爬虫实战【1】使用python爬取博客园的某一篇文章

博客园比较适合爬虫初学者。我们第一个目标是爬取某个博主的所有博文。第一步,获取某一篇文章。第二步,获取该博主所有文章的url列表。第三步,下载所有文章。第一次实战,我们以博客园为例。Cnblog是典型的静态网页,通过查看博文的源代码,可以看出很少js代码,连css代码也比较简单,很适合爬虫初学者来练习。 博客园的栗子,我们的目标是获取某个博主的所有博文,今天先将第一步。 举个栗子,我们参考‘农民伯伯’的博客文章吧,哈哈。他是我关注的一个博主。http://www.cnblogs.com/over140/p/4440137.html这是他的一篇名为“【读书笔记】长尾理论”的文章。我们如果想要存储这篇文章,需要保存的内容首先是文章的标题,再就是文章的正文。 文章的标题怎么获取的?先看一下文章标题在网页源代码中的位置是如何的。  可以看出来,标题的文字内容是包含在一个a标签里面的,我们将这个标签打印出来:<aid="cb_post_title_url"class="postTitle2"h...

爬虫入门【8】Python连接MongoDB的用法简介

MongoDB是一种跨平台,面向文档的NoSQL数据库,提供高性能,高可用性并且易于扩展。包含数据库,集合,文档等几个重要概念。我们在这里不介绍MongoDB的特点和用法了,感兴趣的可以查一下官方文档。在此重点介绍如何使用python连接MongoDB,并通过PyMongo操作MongoDB数据库。这里默认MongoDB已经安装好啦,安装教程可以参考:http://www.yiibai.com/mongodb/mongodb_environment.html感谢易百教程~~~~~目前最新版本为3.5.1。请注意不要单独安装bson包了,否则会与PyMongo不兼容。使用PyMongo时,第一步是运行mongod实例创建一个MongoClient,代码如下:当然,在使用代码测试之前,请务必保证MongoDB服务已经打开,否则连接不上的~~~~frompymongoimportMongoClientclient=MongoClient()#这是设置连接默认主机和端口,也可以明确指定主机和端口frompymongoimportMongoClient#client=MongoClient()c...

爬虫入门【7】Python-文件的读写和JSON

最重要的open()方法将返回一个file对象,经常使用的两个参数为open(filename,mode)其中,filename为file保存的地址,可以是本地地址,相对地址或者绝对地址。mode对象为对file对象进行的操作'''对这个方法进行一些解释open(file,mode='r',buffering=None,encoding=None,errors=None,newline=None,closefd=True)file就是要操作的文件的地址,这个文件如果不存在,会创建;如果存在会打开;mode参数:r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。r+打开一个文件用于读写。文件指针将会放在文件的开头。rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。w+打开一个文件用于读写。如果该文...

爬虫入门【6】Selenium用法简介

一句话,自动化测试工具。它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器。如果你在这些浏览器里面安装一个Selenium的插件,那么便可以方便地实现Web界面的测试。换句话说叫Selenium支持这些浏览器驱动。我们在Python里面安装Selenium的话,就可以调用浏览器来访问web界面了。Selenium调用web需要由对应的浏览器驱动来支持。首先要确认自己的系统版本,我安装的是win10,在系统设置里面查询一下自己的版本号。本来想下载Chrome或者FireFox的驱动,但是Selenium的官网点进去想下载都困难。。。。----------------------------我是华丽的分割线--------------------------------------------------------突然又下好了,地址为http://www.seleniumhq.org/download/,Chrome和Firefox的。但是由于WebDriver的版本问题,打开还是有些困难,回头再弄把。。先用Edge。-------------------...

爬虫入门【5】PyQuery简介

目前最新的版本是1.3,基于最新版本进行介绍。主要根据PyQuery的官方文档进行了更新。frompyqueryimportPyQueryaspqfromlxmlimportetreeimporturllibdoc=pq('<pid="hello"class="hello"></p>')#解析文档的基本方法p=doc('p')#获取p标签print(p.attr('id'))#获取p标签的id属性的值p.attr('id','plop')#改变p标签的id属性的值为plopprint(p.attr('id'))p.attr.id='snow'#使用python的方式改变id属性print(p.attr.id)p.attr['id']='ola'print(p.attr['id'])p.attr(id='hello',class_='hello2')print(p)helloplopsnowola<pid="hello"class="hello2"/>p.add_class...

爬虫入门【4】正则表达式用法简介

首先推荐使用r'string'来定义字符,免去转义字符的影响。#'.',点号,在默认模式中,匹配任何一个字符,除了新的行newline。如果DOTALL标记指定了,那么还可以匹配newline。#'^',匹配字符串的开始#'$',匹配字符串的结束。比如foo匹配foo或者foobar,但是foo$只能匹配到foo。#'*',匹配0个或者多个字符,比如ab*,可以匹配a,ab,abbbb等#'+',匹配1个或者多个字符,比如ab+,可以匹配ab,或者abbbb#'?',匹配0或者1个字符,比如ab?只能匹配a或者ab。#贪婪模式,*?+,都是贪婪模式的,会尽可能多的匹配字符,在后面加上一个?则会变为非贪婪模式,尽可能匹配少的字符。#我们一般用非贪婪模式。#{m},指定匹配的数量,比如a{6}表示将匹配6个a字符,而不是5个,准确匹配。#{m,n},匹配在m~n个字符之间,包含m和n,比如a{3,5}将匹配3-5个a字符,一般会取上限来匹配。#如果不指定m或者n,则表示没有上限,下限不能低于0个#{m,n}?,非贪婪模式的匹配,尽可能匹配少,取下限m来匹配。#[],用于创造一个字符的集合,...

爬虫入门【3】BeautifulSoup4用法简介

首先创建一个我们需要解析的html文档,这里采用官方文档里面的内容:html_doc="""<html><head><title>TheDormouse'sstory</title></head><body><pclass="title"><b>TheDormouse'sstory</b></p><pclass="story">Onceuponatimetherewerethreelittlesisters;andtheirnameswere<ahref="http://example.com/elsie"class="sister"id="link1">Elsie</a>,<ahref="http://example.com/lacie"class="sister&q...

爬虫入门【2】Requests库简介

使用Requests发送网络请求很简单#首先要导入requests库importrequests#返回一个Response对象r=requests.get('https://github.com/timeline.json')#由此可以看出来Requests的API十分简单,#post请求r=requests.post('http://httpbin.org/post')#Put请求,delete请求,head请求,options请求r=requests.put('http://httpbin.org/put')一般的get传递参数方法是将数据与url地址用?连起来。Requests库允许使用params关键字参数,以一个dict来提供这些参数。importrequestspayload={'key1':'value1','key2':'value2'}r=requests.get('http://httpbin.org/get',params=payload)print(r.url)#可以看出response对象由url属性http://httpbin.org/get?key1=va...

爬虫入门【1】urllib.request库用法简介

如何使用urllib库获取网络资料打开指定的URLurllib.request.urlopen(url,data=None,[timeout,]*,cafile=None,capath=None,cadefault=False,context=None)url参数,可以是一个string,或者一个Request对象。data一定是bytes对象,传递给服务器的数据,或者为None。目前只有HTTPrequests会使用data,提供data时会是一个post请求,如若没有data,那就是get请求。data在使用前需要使用urllib.parse.urlencode()函数转换成流数据。fromurllibimportrequestresp=request.urlopen('http://www.baidu.com')print(type(resp))#可以看出,urlopen返回的是一个HTTPResponse对象<class'http.client.HTTPResponse'>print(dir(resp))#resp具有的方法和属性如下,我们最常用的是read和rea...

微信小程序请求接口读取json

wx.request({url:'test.php',data:{x:'',y:''},header:{'content-type':'application/json'//默认值},success(res){console.log(res.data)this.setData({msg:res.data})}}) ...

微信程序之自定义select下拉选项框组件

知识点:组件,animation,获取当前点击元素的索引与内容微信程序中没有select下拉选项框,所以只有自定义。自定义的话,可以选择模板的方式,也可以选择组件的方式来创建。这次我选择了组件,这样只需引入组件和添加数据,其它的不用管,就能实现多个地方重复使用了。第一步:创建组件所需的文件我喜欢把共用的内容都放在和pages文件同级的地方,所以有了下面的目录结构 (1)先创建一个自定义名字的文件夹,例如我上面的Componet(2)再创建一个select文件夹,然后:右键这个文件夹,新建下面的这个Component。然后输入需要创建的名称,我这里为了方便就取了select的名字。然后就会自动创建4个文件,js、json、wxml、wxss。第二步:开始配置组件注意:如果通过第一步创建的可直接跳过第二步。(1)通过第一步创建的组件的文件夹中,已经自动配置好了。只需在引入组件的时候,在引入组件的页面的json文件中配置组件的名称和组件的位置。(2)如果自己手动创建组件的js、json、wxml、wxss这个文件,那么需要在json文件中填入 "compone...

微信程序之swiper轮播图中的图片自适应高度

程序中的轮播图很简单,官方都有例子的,但是唯一的缺陷就是swiper是固定死的150px高度,这样如果传入的图片大于这个高度就会被隐藏。辣么,怎样让图片自适应不同分辨率捏。我的思路是:获取屏幕宽度,获取图片的宽高,然后等比设置当前屏幕宽度下swiper的高度。1.结构<swiperindicator-dots="{{indicatorDots}}"autoplay="{{autoplay}}"interval="{{interval}}"duration="{{duration}}"indicator-active-color="{{bg}}"><blockwx:for="{{imgUrls}}"><swiper-item><imagesrc="{{item}}"class="slide-image"mode="widthFix"bindload='imgH'/>//bindload是绑定图片加载的事件,记得给image加上mode=“widthFix”这个属性哦,还有就是设置这个image100%宽度哟</swiper-item...

微信机器人框架- wechaty

项目介绍wechaty(https://github.com/wechaty/wechaty)是一款开源的微信SDK,它基于微信公开的API,对接口进行了一系列的封装,提供一系列简单的接口,然后开发者可以在其之上进行微信机器人的开发。在跟作者沟通试用以后,发现其中有着非常多的应用场景,比如:1)如果你的好友众多,如何管理和维护好友分组;2)如何快速有序地处理海量聊天信息,并区分重要性;3)如何处理海量的聊天组,特别是微信可以任意建组,长期以后会出现非常多的聊天组;4)能否可以自动智能地进行聊天回复5)……1快速上手wechaty使用node编写,所以支持几乎所有的平台,wechaty的hello-world只需要6行代码即可实现聊天记录的动态收集。为了使用方便作者还进行了docker化的封装,结合docker绝对是一个不错的选择。Step1:新建一个mybot.js,内容如下:const{Wechaty}=require('wechaty')Wechaty.instance()//Singleton.on('scan',(url,code)=>cons...

wechaty-微信聊天机器人-调研分析

1、背景知识点1、Wechaty是什么?wechaty是一款开源的微信SDK,它基于微信公开的API,对接口进行了一系列的封装,提供一系列简单的接口,然后开发者可以在其之上进行微信机器人的开发,微信机器人框架。Github官方说明:Wechaty是一个用于个人帐户的WechatBotSDK,它允许您创建软件以扩展Wechat的功能,使用TypeScript在Node.js中编写,支持所有平台,包括Linux,OSX,Win32和Docker。 作为开发人员,您可以使用Wechaty轻松地在Wechat个人帐户上构建您的机器人,有效地管理消息发送/接收,房间创建/邀请,联系友谊,以及令人愉快的用户和您的机器人之间的人为挑战。2、Wetool是什么?微信社群管理工具。可以提供客服消息手法、检测僵尸粉、自动回复机器人、群统计、挂机百宝箱(自动接受好友、欢迎进群新人、自动踢人等)。有两个版本,企业版比免费版功能要更强大。3、SDKSDK即“软体开发工具包”SoftwareDevelopmentKit,一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台...
首页上一页...113114115116117下一页尾页