python xpath解析网页_python 爬虫(xpath解析网页,下载照片)

python 爬虫(xpath解析网页,下载照片)

发布时间:2018-02-02 11:39,

浏览次数:998

, 标签:

python

xpath

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML 文档中对元素和属性进行遍历。

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。lxml和正则一样,也是用 C 实现的,是一款高性能的

Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

lxml python 官方文档:[http://lxml.de/index.html](http://lxml.de/index.html)

需要安装C语言库,可使用 pip 安装:pip install lxml (或通过wheel方式安装)

下面的代码实现了抓取某个婚恋网站的图片并保存到本地,通过使用xpath来解析获取图片的连接地址,然后保存到本地的。代码只实现获取一页的图片,通过分析url 【

http://www.qyw520.com/user/list-1-0--0-0-0-0-0-0-0-0-0-0-0-0-0---0-0-0-2.html

】的变化,可以发现页数与list后面的数字有关,如果需要回去多页的数据,只需设置一个偏移量来控制页码就可以了。

import urllib.request import random from lxml import etree class MySpider:

userName = 1 def headers(self): """ 随机产生User-Agent的header :return: """

headers_list = [

"User-Agent:Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0",

"User-Agent:Mozilla/4.0(compatible;MSIE8.0;WindowsNT6.0;Trident/4.0)",

"User-Agent:Mozilla/4.0(compatible;MSIE7.0;WindowsNT6.0)",

"Mozilla/5.0(WindowsNT6.1;rv:2.0.1)Gecko/20100101Firefox/4.0.1",

"Opera/9.80(WindowsNT6.1;U;en)Presto/2.8.131Version/11.11",

"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;TencentTraveler4.0)",

"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;Maxthon2.0)",

"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1;360SE)",

"Mozilla/4.0(compatible;MSIE7.0;WindowsNT5.1)", ] ua_agent =

random.choice(headers_list) return ua_agent def load_page(self, url, header):

headers = {"User-Agent": header} request = urllib.request.Request(url,

headers=headers) response = urllib.request.urlopen(request) return

response.read() def parse(self, html): # 解析html 为 HTML 文档 content =

html.decode("utf-8") selector = etree.HTML(content) img_links =

selector.xpath('//img[@class="img"][email protected]') for link in img_links:

self.write_img(link) def write_img(self, imgurl): print("正在存储文件 %d ..." %

self.userName) # 1. 打开文件,返回一个文件对象 with open('images/' + str(self.userName) +

'.png', 'wb') as f: # 2. 获取图片里的内容 images =

urllib.request.urlopen('http://www.qyw520.com' + imgurl) # 3. 调用文件对象write()

方法,将图片的内容写入到文件里 f.write(images.read()) print("文件 %d 保存成功!" % self.userName)

self.userName += 1 def main(self, url): header = self.headers() html =

self.load_page(url, header) self.parse(html) if __name__ == "__main__": url =

"http://www.qyw520.com/user/list-1-0--0-0-0-0-0-0-0-0-0-0-0-0-0---0-0-0-2.html"

myspider = MySpider() myspider.main(url)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值