2017.07.26 Python网络爬虫之Scrapy爬虫框架

1.windows下安装scrapy:cmd命令行下:cd到python的scripts目录,然后运行pip install 命令

然后pycharmIDE下就有了Scrapy:

在cmd下运行scrapy命令,出错!!!:

解决方法:

Python的Lib\site-packages文件夹下新建一个sitecustomize.py:

import sys sys.setdefaultencoding(‘gb2312‘)

再次在cmd下运行scrapy,成功:

2.Scrapy选择器和XPath和CSS:通过特定的XPath或者CSS表达式来选择HTML文件中的某个部分

(1)XPath是一门用来在XML文件中选择节点的语言,也也可以用在HTML上,是一门在XML文档中查找信息的语言,XPath可以用来在XML文档中对元素和属性进行遍历。

XPath含有超过100个内建的函数,这些函数用于字符串值,数值,日期和时间比较,节点和QName处理,序列处理,逻辑值等等

(2)在XPath中,有7种类型的节点:元素,属性,文本,命名空间,处理指令,注释以及文档节点(或称为根节点)。XML文档是被作为节点树来对待的,树的根被称为文档节点或者根节点

做个简单的XML文件:

<superhero>
<class>
<name lang="en">Tony Stark </name>
<alias>Iron Man </alias>
<sex>male </sex>
<birthday>1969 </birthday>
<age>47 </age>
</class>
<class>
<name lang="en">Peter Benjamin Parker </name>
<alias>Spider Man </alias>
<sex>male </sex>
<birthday>unknow </birthday>
<age>unknown </age>
</class>
<class>
<name lang="en">Steven Rogers </name>
<alias>Captain America </alias>
<sex>male </sex>
<birthday>19200704 </birthday>
<age>96 </age>
</class>
</superhero>

(3)XPath使用路径表达式在XML文档中选取节点:常用的路径表达式如下:

nodeName:选取此节点的所有子节点

/:从根节点选取

//:从匹配选择的当前节点选择文档中的节点,不考虑它们的位置

.:选取当前节点

..:选取当前节点的父节点
@:选择属性

*:匹配任何元素节点

@*:匹配任何属性节点

Node():匹配任何类型的节点

(4)XPath选择器如何收集数据:

(5)嵌套选择器:

3.CSS选择器(层叠样式表):CSS规则由两个主要的部分构成:选择器,以及一条或多条声明

selector{declaration1;declaration2;.......declarationN}

CSS选择器:             例子:

.class          .intro                   选择class="intro"的所有元素

#id              #firstname          选择id="firstname"的所有元素

*                 *                          选择所有元素

element        p                         选择所有<p>元素

element,element    div,p                 选择所有<div>元素和所有<p>元素

element  element      div   p                 选择<div>元素内部的所有p元素

[attribute]                   [target]               选择带有target属性的所有元素

[attribute=value]        [target=_blank]    选择target="_blank"的所有元素

4.CSS选择器测试:

5.其他选择器:

XPath选择器还有一个.re()方法,用于通过正则表达式来提取数据,然而不同于使用.xpath()或者css(),,re()方法返回unicode字符串的列表。所以。无法构造嵌套的.re()调用

时间: 2024-12-26 07:20:06

2017.07.26 Python网络爬虫之Scrapy爬虫框架的相关文章

2017.07.28 Python网络爬虫之爬虫实战 今日影视2 获取JS加载的数据

1.动态网页指几种可能: 1)需要用户交互,如常见的登录操作: 2)网页通过js / AJAX动态生成,如一个html里有<div id="test"></div>,通过JS生成<divid="test"><span>aaa</span></div>: 3)点击输入关键字后进行查询,而浏览器url地址不变 2.想用Python获取网站中JavaScript返回的数据,目前有两种方法: 第一种方法

2017.07.24 Python网络爬虫之urllib2修改Header

1.urllib2修改header: (1)在使用网络爬虫时,有一些站点不喜欢被程序访问(非人为访问),会检查连接者的"身份证":默认情况下,urllib2把自己的版本号Python-urllib2/x.y作为自己的"身份证号码"来通过检查,这个身份证号码可能会让站点有点迷惑,或者干脆不工作 (2)这时可以让python程序冒充浏览器访问网站,网站是通过浏览器发送过来的User-Agent的值来确认浏览器身份的,用urllib2创建一个请求对象,并给它一个包含头数据

2017.07.22 Python网络爬虫之简单的Python脚本

1.九九乘法表: # !usr/bin/env python# -*- coding:utf-8 -*- class PrintTable(object): """打印九九乘法表""" def __init__(self): print(u"开始打印9x9乘法表格") self.print99() def print99(self): for i in xrange(1,10): for j in xrange(1,i+1):

2017.07.19 Python网络爬虫之Python语句

1.if else 语句:非此即彼 if 判断条件1: 执行语句1 elif 判断条件2: 执行语句2 elif 判断条件3: 执行语句3 else: 执行语句4 编写一个testIfRamainder7.py 熟悉一下if语句: # !usr/bin/env python# -*- coding:utf-8 -*- def isEvenNum(num): if num%7==0: print(u"%d 可以被7整除" %num) else: print(u"%d 不可以被7

2017.07.17 Python网络爬虫之Python基础1

1.Python变量类型: (1)数字 int类型:有符号整数,就是C语言中所指的整型,也就是数学中的整数,它的大小与安装的解释器的位数有关 查看当前系统下的Int最大值: 与C语言不同,Python给变量赋值时不需要预先声明变量类型,也就是说在给变量赋值时小于2147483647的数字默认认为是int类型,超过了则自动为Long类型 另外,八进制数字,十六进制数字都属于int(Long)类型的 Long类型:长整型,超过int类型的整数默认转换为Long,一般来说int足够用了,只要内存足够大

2017.07.09 Python网络编程之重用套接字地址

1.重用套接字地址: # -*- coding: UTF-8 -*-# 如果在某个端口上运行一个Python套接字服务器,连接一次后便终止了运行,就不能在使用这个端口了# !usr/bin/env python# Python Network Programming Cookbook --Chapter -1# This program is optimized for Python 2.7# It may run on any other version with/without modifi

2017.07.12 Python网络编程之使用多路复用套接字I/O

1.在本章开始之前,需要先理解同步与异步,阻塞与非阻塞的区别: "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话

2017.07.16 Python网络编程之在套接字服务器中使用ThreadingMixIn

直接上代码,之后再解释: # -*- coding: UTF-8 -*-# 或许基于某些原因你不想编写基于进程的应用程序,而更愿意编写多线程应用程序# 和之前的基于ForkingMixIn的套接字服务器一样,使用ThreadingMixIn编写的套接字服务器要遵循相同的回显服务器编程模式# ThreadedServr继承自TCPServer和ThreadingMixIn,客户端连接这个多线程版服务器时,会创建一个新线程# !usr/bin/env python# Python Network P

2017.08.04 Python网络爬虫之Scrapy爬虫实战二 天气预报的数据存储问题

1.数据存储到JSon:程序阅读一般都是使用更方便的Json或者cvs等待格式,继续讲解Scrapy爬虫的保存方式,也就是继续对pipelines.py文件动手脚 (1)创建pipelines2json.py文件: import timeimport jsonimport codecs class WeatherPipeline(object): def process_item(self, item, spider): today=time.strftime('%Y%m%d',time.loc