Xpath即为XML路径语言(XML Path Language),他是一种用来确定XMl文档中某部分位置的语言。
Xpath基于XML的树状结构,提供在数据结构中寻找节点的能力。起初Xpath的提出的初衷是是将其做一种通用的、介于Xpointer与XSL间的语法模型。但是XPath很快被开发者采用用来当做小型查询语言。
Xpath解析网页的流程:
1.首先通过Requests库获取网页数据2.通过解析网页,得到想要的数据或链接3.网页解析可以通过Xpath或其他解析工具进行,Xpath是一个非常好用的解析工具
下面的例子为小猪短租官网抓取住房信息,具体代码如下:
'''/?startDate=-04-05&endDate=-04-08 第一页小猪短租的网页地址/search-duanzufang-p2-0/?startDate=-04-05&endDate=-04-08第二页/search-duanzufang-p3-0/?startDate=-04-05&endDate=-04-08第三页/search-duanzufang-p4-0/?startDate=-04-05&endDate=-04-08第四页比较以上网页之间的不同'''import requests# 导入第三库Requestsfrom lxml import etree # 导入第三方库lxml的etree方法import time # 导入time模块url = '/?startDate=-04-05&endDate=-04-08' # 第一页网站地址data =requests.get(url).text # 利用requests解析网页,加载网页文本s=etree.HTML(data)files=s.xpath('//*[@id="page_list"]/ul/li') # 第一个旅馆的信息with open(r'C:\Users\Administrator\Desktop\xiaozhu.xls','w',encoding='utf-8') as f: # 使用with open()方法打开桌面xiaozhu.xls文件,'w'该参数指定为若该文件不存在,则会新建该文件,encoding='utf-8'指定文档的编码风格for ul in files:# 使用该循环使每条信息能够进行匹配pic=ul.xpath('./a/img/@lazy_src')[0] # [0]----抓取的数据默认为列表,需要取其第一个元素,下同price=ul.xpath('./div[2]/div[1]/span/i/text()')[0]place = ul.xpath('./div[2]/div[2]/a/span/text()')[0].strip() # strip()去掉文本中的空格detial = ul.xpath('./div[2]/div[2]/em/text()')[0].strip()pingjia = ul.xpath('./div[2]/div[2]/em/span/text()')[0].strip()danwei=ul.xpath('./div[2]/div[1]/span/text()')if len(danwei)>1: # 当价格模式不一样时,需要写入不一样的数据,否则系统会抛出异常f.write("{},{}{}{},{},{},{}\n".format(pic,danwei[0],price,danwei[1],place,detial,pingjia))else:f.write("{},{}{},{},{},{}\n".format(pic, danwei[0], price, place, detial, pingjia))time.sleep(1) # 每次循环后使程序停顿1秒,这样防止访问太过频繁,被官网拉黑,无法进入网站抓取数据,这样也有利于网站,这个非常有必要,下同。for i in range(2,5): # 循环第2至5页的网站地址,因为网站地址从第二页开始,有规律可循,而第一页无规律可循,所以将第一页单独抓取数据url='/search-duanzufang-p{}-0/?startDate=-04-05&endDate=-04-08'.format(i)data = requests.get(url).texts = etree.HTML(data)files = s.xpath('//*[@id="page_list"]/ul/li')for ul in files:pic = ul.xpath('./a/img/@lazy_src')[0]price = ul.xpath('./div[2]/div[1]/span/i/text()')[0]place = ul.xpath('./div[2]/div[2]/a/span/text()')[0].strip()detial = ul.xpath('./div[2]/div[2]/em/text()')[0].strip()pingjia = ul.xpath('./div[2]/div[2]/em/span/text()')[0].strip()danwei = ul.xpath('./div[2]/div[1]/span/text()')if len(danwei) > 1:f.write("{},{}{}{},{},{},{}\n".format(pic, danwei[0], price, danwei[1], place, detial, pingjia))else:f.write("{},{}{},{},{},{}\n".format(pic, danwei[0], price, place, detial, pingjia))time.sleep(1)time.sleep(1)
抓取的文件需要使用写字板打开,然后另存为-选择编码“ANSI”,然后再用微软EXcel打开,否则一打开会乱码。
抓取的数据如下表(本人使用的是WPS,所以数据并不是很规范):
更多关于爬虫的实例(正则表达式,Beautiful soup,scrapy框架)后续带来,加关注了解详情