python爬虫网页脚本_python网络爬虫之Scrapy

标签,并且这些标签都是成对出现的,开头标签为<>,结束标签为>,在这两个标签之间添加内容。通过这些标签中的相关属性可以设置页面的背景色、背景图像等。

例如,我们打开豆瓣首页,摁下键盘上的F12键,打开浏览器自带“开发者工具”,可以看到一个完整的html文档结构,如下图

a45dacd2d938

HTML文档结构.jpg

从上图可以看出,一个完整的html文档主要包含三部分:DTD文档头,head头部信息和body正文信息。其中DTD文档头用来告诉浏览器执行标准是什么(比如html4或是html5),head头部信息用来说明浏览器的编码方式和文档头名称,body顾名思义就是浏览器的正文部分。

(2)html标签

作为开始和结束的标记,由尖括号包围的关键词,比如 ,标签对中的第一个标签是开始标签,第二个标签是结束标签。html中常见标签如下:

a45dacd2d938

html常用标签.png

a45dacd2d938

html常用标签2.png

其中, “< ul >< li >”是一种嵌套顺序,无序列表,成对出现;li的父元素必须是ul或者ol,不同之处在于ol是一种有序列列表,而ul是无序列表;

(3)html属性

属性是用来修饰标签的,放在开始标签里里面,html中常见四大属性:

属性

说明

class

规定元素的类名,大多数时候用于指定样式表中的类

id

唯一标识一个元素的属性,在html里面必须是唯一的

href

指定超链接目标的url

src

指定图像的url

2. xpath

(1)xpath定义

是一种路径查询语言,简单的说就是利用一个路径表达式从html文档中找到我们需要的数据位置,进而将其写入到本地或者数据库中。(可以将xpath类比为sql结构化查询语言)

(2)xpath常见使用方法

符号

功能

//

表示在整个文本中查找,是一种相对路径

/

表示则表示从根节点开始查找,是一种绝对路径

text()

找出文本值

@

找出标签对应的属性值,比如@href就是找出对应的href链接

.

表示当前节点

..

表示当前节点的父节点

当然xpath除了上述常见用法外,还存两种比较特殊的用法:以相同的字符开头;标签套标签。

用法1:以相同的字符开头:starts-with(@属性部分,属性字符相同部分

用法2:标签套标签:string(.)

#以相同的字符开头

#比如我们想同时提取到下列html中三条文本内容的话,就需要使用starts-with方法

html1 = """

需要的内容1

需要的内容2

需要的内容3

#爬取代码

from lxml import etree

selector = etree.HTML(html1)

content = selector.xpath('//div[starts-with(@id,"test")]/text()')

for each in content:

print each

还有一种是标签套标签形式,参考如下例子

html2 = """

我左青龙,

右白虎

  • 上朱雀,

下玄武,

龙头在胸口

"""

#如果我们想爬取的内容是html文档中的所有文本的话,需要使用string方法进行提取

selector2 = etree.HTML(html2)

content2 = selector2.xpath('//div[@id="test3"]')[0] #列表,只有一个元素

info = content2.xpath('string(.)')

content3 = info.replace('\n','').replace(' ','')

print content3

(3)xpath的谓语结构

该小节参考资料:阮一峰的网络日志

所谓"谓语条件",就是对路径表达式的附加条件。所有的条件,都写在方括号"[]"中,表示对节点进行进一步的筛选。例如:

<?xml version="1.0" encoding="ISO-8859-1"?>

Harry Potter

29.99

Learning XML

39.95

下面从几个简单的例子让大家体会一下

/bookstore/book[1] :表示选择bookstore的第一个book子元素。

/bookstore/book[last()] :表示选择bookstore的最后一个book子元素。

/bookstore/book[last()-1] :表示选择bookstore的倒数第二个book子元素。

/bookstore/book[position()<3] :表示选择bookstore的前两个book子元素。

//title[@lang] :表示选择所有具有lang属性的title节点。

//title[@lang='eng'] :表示选择所有lang属性的值等于"eng"的title节点。

二、python中能够进行网络爬虫的库

1. 安装方式

python中安装包或者模块的方式一般有以下两种:

(1)pip install xxx(xxx表示模块名字)

pip install lxml/numpy/pandas/scrapy/requests

(2)进入到python库网站下载所需模块,然后使用pip install xxx.whl安装即可

pip install lxml‑3.7.3‑cp27‑cp27m‑win_amd64.whl

2. requests

import requests

#我的简书主页

r = requests.get('http://www.jianshu.com/u/95f3a80fac3e')

# r本身是一个reponse对象,需要通过content来返回其内容

print r.content

#其实上面通过content之后得到就是一个完整的html文档,之后可以直接使用lxml等工具直接对其进行解析,下一小节会讲到lxml

print r.status_code

print r.encoding #html的编码方式,一般是UTF-8

print r.cookies

3. lxml

lxml中集成了刚才讲述的xpath这种路径查询语言;例如我们首先创建一个html文档如下

html= """

需要的内容1

需要的内容2

需要的内容3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值