爬虫实战【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】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...

爬虫入门【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...

Python PhatomJS 和Selenium动态加载页面 获取图片内容

如果您觉得感兴趣的话,可以添加我的微信公众号:一步一步学Python![](http://www.51dev.com//FileUpload/news/202003/20200325002543449.jpg)随笔中的代码拷贝自http://www.cnblogs.com/Albert-Lee/p/6275146.html感谢阿里波特,通过学习自己做了一些注释,作为总结和记录。 1fromseleniumimportwebdriver2importrequests3frombs4importBeautifulSoup4importos5importtime6#定义函数时,尽量写上默认参数,字符='',数字=0,特殊对象也要定义默认值,这样就可以简单的通过.来得到参数具有的性质等。7classBeautifulPicture():8def__init__(self):9#给请求指定一个请求头来模拟chrome浏览器10self.headers={'User-Agent':'Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTM...

C#基础——winform应用上传图片到SQLServer数据库

前言之前通过winform与SQLServer的交互一直局限于文本、数字等信息,都可以通过string的方式来传输,但是比如音乐、图片等特殊格式的文件要如何与SQLServer数据库进行交互呢?今天主要讲通过文件流的方式,将特殊文件转换成二进制,然后存储到数据库中。在实际的应用中,如果文件较大或者较多,直接存储在数据中会造成一定的压力,可以转为保存文件名,然后在实际使用的地方调用改文件名对应的文件。主要内容上图为图片上传winform的内容。1、选择图片按钮,功能为通过对话框选择要上传的文件,并将该文件在下面的pictureBox中显示出来。具体代码如下:privatevoidbtn_Choose_Click(objectsender,EventArgse){UserMethod.ShowPic(this.pictureBox1);}1publicstaticvoidShowPic(PictureBoxpicBox)2{3OpenFileDialogofd=newOpenFileDialog();4ofd.InitialDirectory=@"E:";5ofd.Filter="Imag...

C#中的Excel操作【1】——设置Excel单元格的内容,打开Excel文件的一种方式

前言作为项目管理大队中的一员,在公司里面接触最多的就是Excel文件了,所以一开始就想从Excel入手,学习简单的二次开发,开始自己的编程之路!程序界面功能说明打开文件按钮,可以由使用者指定要操作的Excel文件,并在后面的textBox中显示出文件路径。设置单元格按钮,可以根据程序设置Excel文件的内容。退出程序按钮,关闭窗体。程序源代码1usingSystem;2usingSystem.Collections.Generic;3usingSystem.ComponentModel;4usingSystem.Data;5usingSystem.Drawing;6usingSystem.Linq;7usingSystem.Text;8usingSystem.Windows.Forms;9usingSystem.Reflection;10usingMicrosoft.Office.Interop.Excel;11namespaceExcelReadAndWrite12{13publicpartialclassForm1:Form14{15publicStringfilename=str...

JSP基础——属性保存范围和request对象

JSP属性保存范围JSP中提供了四种属性保存范围,分别为page,request,session及application。1、page范围,指设置的属性只在当前页面有效。通过pageContext的setAttribute()方法来设置属性,通过pageContext的getAttribute()来取得属性.代码范例:<%pageContext.setAttribute("name","James");%><%Stringstr=(String)pageContext.getAttribute("name");%>2、request范围,指属性在一次请求范围内有效。如果页面从一个页面跳转到另一个页面,那么该属性就失效了。这里的跳转指的是客户端跳转。服务器端跳转使用<jsp:forward>,该属性仍然有效。通过request的setAttribute()方法来设置属性,通过request的getAttribute()方法来取得属性。代码范例:主页面:<%request.setAttribute("name","James");%><...

Servlet3.0 jsp跳转到Servlet 出现404错误的路径设置方法

 最近又遇到了这种问题,百度了好久,发现有人说要在action的路径里面写Servlet文件的绝对路径,比如说,单独打开servlet的地址为http://localhost:8080/TomcatTest/LoginConfServlet,那么就在action里面写http://localhost:8080/TomcatTest/LoginConfServlet。我尝试着将http://localhost:8080移除,只保留/TomcatTest/LoginConfServlet,还是可以成功的。总结:jsp跳转到servlet的时候,路径设置为/项目名/Servlet名。Servlet中dispatcher跳转到jsp页面时,也要写上/文件夹名/jsp文件名。图示:     之前遇到了一个问题,在博问中也有记载,最后自己摸索着突然就搞清楚了。问题就是:新建的动态web项目,发布到tomcat之后,jsp可以单独访问,servlet可以单独访问,但是通过form表单跳转到servlet的类则出现404错误。反复研究了很久也...

JSP EL表达式 与输入有关的内置对象

与输入有关的隐含对象有两个param和paramValues,用来取得用户的请求参数。在使用EL之前可以使用如下代码取得用户的请求参数:request.getParameter(Stringname);request.getParameterValues(name);param接收的参数只有一个值,而如果参数有几个值,就必须使用paramValues来接收参数。 结合EL内置对象和EL算术表达式做一个简单的计算器程序。首先CalculatorForm.jsp,包含了两个文本框用于输入数字,一个下拉框用来选择运算符。(论HTML中下拉框的使用方法)1<%@pagelanguage="java"contentType="text/html;charset=utf-8"2pageEncoding="utf-8"import="java.util.*"%>3<%@pageimport="java.sql.*"%>4<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3....

<jsp:include>和<%@ include %>的区别

使用<%@include%>指令元素只是将页面的内容静态的包含进来,如果被包含的文件中有JSP代码,则会执行该代码,而不管该文件是否为动态文件。 <jsp:include>动作元素动态地包含文件,如果被包含的文件是静态的,则直接包含内容,不会进行处理;而如果被包含的文件是动态地,则先执行,再包含结果并进行显示。 使用<%@include%>指令元素是将所有的被包含文件包含进来之后,再进行编译等处理,可以简单的将其称为“先包含再处理“。 而使用<jsp:include>动作元素先将所有的代码处理完成之后,再将处理完成的代码的结果包含进行,可以称为“先处理再包含”。...
ymnets ymnets·2020-03-25

使用Timer类的两个实例 动态时钟

1packagechapter16;23importjavax.swing.*;4importchapter15.StillClock;5importjava.awt.event.*;67publicclassClockAnimationextendsJFrame{8publicclassTimerListenerimplementsActionListener{9@Override10publicvoidactionPerformed(ActionEvente){11//TODOAuto-generatedmethodstub12clock.setCurrentTime();13clock.repaint();14}15}16privateStillClockclock=newStillClock();17publicClockAnimation(){18add(clock);19Timertimer=newTimer(1000,newTimerListener());20timer.start();21}22publicstaticvoidmain(String[]args){23...
首页上一页...48814882488348844885...下一页尾页