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"]/@src') 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)