爬虫实战【10】利用Selenium自动登陆京东签到领金币

今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币。我们先来看一下京东的登陆页面,如下图所示:【插入图片,登陆页面】登陆框就是右面这一个框框了,但是目前我们遇到一个困呐,默认的登陆方式是扫码登陆,如果我们想要以用户民个、密码的形式登陆,就要切换一下。我们看一下这两种登陆方式是如何切换的,通过浏览器的元素检查,我们看一下两个标签。【插入图片,两种登陆方式】扫码登陆和用户登陆分别在一个div标签里面,我们可以通过css选择器选定用户登陆,使其下面的a标签的class为checked,接下来的一切就比较简单了。我们要获取到用户名输入框、密码输入框以及登陆按钮即可。【插入图片,用户登陆框】下面看一下实现的代码,假设我们通过FireFox浏览器模拟登陆吧。fromseleniumimportwebdriverfromselenium.webdriver.common.byimportByfromselenium.webdriver.support.uiimportWebDriverWaitfromselenium.webdriver.supportimportexpecte...

爬虫实战【9】Selenium解析淘宝宝贝-获取宝贝信息并保存

通过昨天的分析,我们已经能到依次打开多个页面了,接下来就是获取每个页面上宝贝的信息了。【插入图片,宝贝信息各项内容】从图片上看,每个宝贝有如下信息;price,title,url,dealamount,shop,location等6个信息,其中url表示宝贝的地址。我们通过查看器分析,每个宝贝都在一个div里面,这个div的class属性包含item。而所有的item都在一个div内,这个总的div具有class属性为items,也就是单个页面上包含所有宝贝的一个框架。因而,只有当这个div已经加载了,才能够断定页面的宝贝信息是可以提取的,所以再提取信息之前,我们要判断这个div的存在。对于网页源码的解析,这次我们使用Pyquery,轮换着用一下嘛,感觉还是PyQuery比较好用,尤其是pyquery搜索到的对象还能在此进行搜索,很方便。Pyquery的使用方法请查看我之前的文章,或者看一下API。下面我们依次来分析一下每项信息应该如何提取。1、Price【插入图片,price】可以看出,price的信息在一个div里面,具有clas属性price,我们如果通过text来获取的话,还会...

爬虫实战【8】Selenium解析淘宝宝贝-获取多个页面

作为全民购物网站的淘宝是在学习爬虫过程中不可避免要打交道的一个网站,而是淘宝上的数据真的很多,只要我们指定关键字,将会出现成千上万条数据。今天我们来讲一下如何从淘宝上获取某一类宝贝的信息,比如今天我们以“手机”作为关键词,举个例子。【插入图片,淘宝手机页面示意】上面是搜索框,下面显示了很多宝贝信息,最下面是翻页的控制按钮。【插入图片,淘宝手机页面源代码】我们看一下这个页面的源代码,发现都是一些js,还提示了要运行脚本才能显示。难道宝贝也是Ajax加载的?我们来找一下有没有数据信息。【插入图片,XHR中什么都没有】可惜XHR打开之后,发现并没有加载任何数据。遇到这种情况,我们可以选择通过Selenium模仿浏览器访问,这样能够加载到所有的内容,虽然比直接访问数据慢一些,但基本上什么网页都能爬到。我们先分析一下流程。一上来,我们要打开淘宝的首页,在搜索框中输入关键字,然后点击搜索按钮。【插入图片,主页内容解析】有两个元素是我们要获取到的,一个是搜索框,一个是搜索按钮。在Selenium中得到元素的方法,请回顾一下我之前写的入门文章,或者查看Selenium的API文档,不是很负责。在本文中...

爬虫实战【6】Ajax内容解析-今日头条图集

AJAX=AsynchronousJavaScriptandXML(异步的JavaScript和XML)。Ajax并不是新的编程语言,而是一种使用现有标准的新方法,当然也不是很新了,在97年左右,微软就发明了ajax的关键技术,但是并没有推广;随着Googleeath、googlesuggest和gmail的广泛应用,ajax才开始流行起来。ajax最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新网页的部分内容。ajax不需要任何浏览器插件,但是需要用户允许javascript的执行。运用XHTML+CSS来表达资讯;运用JavaScript操作DOM(DocumentObjectModel)来执行动态效果;运用XML和XSLT操作资料;运用XMLHttpRequest或新的FetchAPI与网页服务器进行异步资料交换;注意:AJAX与Flash、Silverlight和JavaApplet等RIA技术是有区分的。目前有很多使用ajax的应用案例,比如新浪微博,google地图,今日头条等。今天我们借助今日头条见一下ajax内容的解析,如何爬取这类网站的内容。前几天...

【穿插】Python基础之文件、文件夹的创建,对上一期代码进行优化

在上一期妹子图的爬虫教程中,我们将图片都保存在了代码当前目录下,这样并不便于浏览,我们应该将同一个模特的图片都放在一个文件夹中。今天我们就简单讲一下Python下如何创建文件、文件夹,今后就可以用上了。绝对路径比较好理解,就是最完整的路径,包含盘符的,比如D:userabc.txt,表示的就是D盘目录下,user文件夹中的abc.txt文件。当然在代码中,是特殊字符,我们需要两个来表示该路径,open('D:userabc.txt')。相对路径,指的是相对当前路径来说的,假如当前路径为D:userpublic。当前路径下的文件可以直接输入文件名来访问,比如open(abc.txt),表示打开绝对路径为D:userpublicabc.txt的文件。当前路径下的文件夹中的文件,可以这样来访问,比如open('/test/abc.txt'),表示打开绝对路径为D:userpublicestabc.txt的文件。如何获取当前路径呢?导入os模块,os的getcwd()方法会返回代码所在的当前目录。这里返回的是绝对路径。importoscwpath=os.getcwd()print(cwpath...

爬虫实战【5】送福利!Python获取妹子图上的内容

【插入图片,妹子图首页】哈,只敢放到这个地步了。今天给直男们送点福利,通过今天的代码,可以把你的硬盘装的满满的~下面就开始咯!假如我们知道某张图片的url,如何获取到这张图片呢?先看一下最简单的方法:【插入图片,单页url】我们获取到图片的内容,通过二进制流写入到文件中,并保存起来。这次偷懒啦,将所有图片都保存在当前目录下。importrequestsurl='http://i.meizitu.net/2017/11/24a02.jpg'pic=requests.get(url).contentpic_name=url.split(r'/')[-1]withopen(pic_name,'wb')asf:f.write(pic)竟然出错了,得到的图片竟然是这样的:【插入图片,反爬虫-防盗链】看来现在各种网站都开始反爬虫了,我们尝试一下加入一些伪装信息。估计是很多骚动青年都拿妹子图来练习爬虫了。。。经过探索,加入referer头信息,才能继续下载,这个referer对应的内容是该图片的母地址,也就是存放这个图片的网页的地址。可以啦,我们得到图片了,代码如下,做了一些修改,不直接打开图片地址...

爬虫实战【4】Python获取猫眼电影最受期待榜的50部电影

前面几天介绍的都是博客园的内容,今天我们切换一下,了解一下大家都感兴趣的信息,比如最近有啥电影是万众期待的?猫眼电影是了解这些信息的好地方,在猫眼电影中有5个榜单,其中最受期待榜就是我们今天要爬取的对象。这个榜单的数据来源于猫眼电影库,按照之前30天的想看总数量从高到低排列,取前50名。我们先看一下这个表单中包含什么内容:【插入图片,6猫眼榜单示例】具体的信息有”排名,电影海报,电影名称,主演,上映时间“以及想看人数,今天我们主要关注前面5个信息的收集。之前我们用正则表达式,在网页源代码中匹配了某一篇文章的标题,大家可能还有印象,这次我们还要用正则表达式来一次爬取多个内容。另外,也尝试一下requests库。我们先分析一下这个榜单页面,跟之前博客园的大概是类似的。url=http://maoyan.com/board/6?offset=0上面是第一页的榜单地址,我们一眼就关注到了offset这个值,毫无疑问,后面的页面都是将offset改变就能获取到了。来看一下第二页:http://maoyan.com/board/6?offset=10不一样的地方,offset每次增加了10,而不是...

爬虫实战【3】Python-如何将html转化为pdf(PdfKit)

前面我们对博客园的文章进行了爬取,结果比较令人满意,可以一下子下载某个博主的所有文章了。但是,我们获取的只有文章中的文本内容,并且是没有排版的,看起来也比较费劲。。。咋么办的?一个比较好的方法是将文章的正文内容转化成pdf,就不要考虑排版的事情了,看起来比较美观,也不会丢失一些关键信息。python中将html转化为pdf的常用工具是Wkhtmltopdf工具包,在python环境下,pdfkit是这个工具包的封装类。如何使用pdfkit以及如何配置呢?分如下几个步骤。1、下载wkhtmltopdf安装包,并且安装到电脑上,在系统Path变量中添加wkhtmltopdf的bin路径,以便于pdfkit的调用。下载地址:https://wkhtmltopdf.org/downloads.html请根据自己的系统版本,选择合适的安装包。如果没有装C语言库,建议选择Windows下的第二种。【插入图片pdf1】2、在pycharm中安装pdfkit库,过程就不介绍啦,前面讲过类似的内容。3、在pycharm中安装whtmltopdf库。这个和第一步中的安装包是两个东西,请区别开来。对于简单的...

爬虫实战【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来匹配。#[],用于创造一个字符的集合,...
首页上一页...383384385386387下一页尾页