python - scrapy - xpath (一)

学习python爬虫(scrapy模块),首先准备python环境,安装第三方包scrapy

(mac环境可参考:https://blog.csdn.net/qq_42512064/article/details/80982470),准备好环境后,从第一个简单的爬虫程序开始吧!


一、简介:爬虫就是获取网页的数据,获取简单的数据容易,解析其中的数据拿到自己想要的却不那么容易,大家都知道网页是有很多元素组成:<div>、<p>、<h>、<a>等,每一种元素都有很多个,通过什么去识别这些元素呢,scrapy提供两种方式,xpath和css,从字面上理解,xpath就是通过元素在网页中的路径去识别元素(下表为xpath中路径表达式列表)。


二、爬淘宝的一丢丢数据

1、淘宝页面(爬取下图框框中的数据)



2、页面右键“查看源代码”



3、完整代码先贴在这里

#coding:utf-8

import urllib2
# import platform
from scrapy.selector import Selector

resp = urllib2.urlopen('https://www.taobao.com/', timeout=3)
# my_os = platform.system()
# print 'my_os: '+ str(my_os)
# print 'resp info: '+ str(resp.info())
# print 'resp read: '+ str(resp.read())

subSelector = Selector(text=resp.read()).xpath('//div[@class="nav J_Nav clearfix "]')

#主题市场
zhuti = subSelector.xpath('./h2/text()').extract()
print 'zhuti: ' + zhuti[0].encode('utf-8')

#天猫
tianmao = subSelector.xpath('./ul/li/a/text()').extract()
print 'tianmao: ' + tianmao[0].encode('utf-8')

#电器城
dianqicheng = subSelector.xpath('./ul[@class="nav-bd"]/li/a/text()').extract()
print 'dianqicheng: '+ dianqicheng[1].encode('utf-8')
 
 

4、代码解读

1⃣️首先要打开网页,并且要用到scrapy的选择器,so需要导入urllib2和Selector两个模块;

import urllib2
# import platform
from scrapy.selector import Selector
 
 

2⃣️打开淘宝网页,urlopen第一个参数为要打开网页的url,第二个参数为打开网页限制的超时时间,resp为打开网页的返回,这个值在后面解析数据中需要用到,resp中包含很多东西:访问网页的返回码如200、404、500等(通过resp.getcode()获得)、网页源代码(通过resp.read()获得)等;

resp = urllib2.urlopen('https://www.taobao.com/', timeout=3)
# print 'resp info: '+ str(resp.info())
# print 'resp read: '+ str(resp.read())

3⃣️接下来解析数据,先获取页面’主题市场‘,text后即为网页源代码,页面中的div元素很多,首先在源代码中搜下‘主题市场’四个字,发现该网页中只有这一个,可以看到它包含在一个div中,div通过什么来识别呢,它的class(切记,class这种东西,从源代码中直接找到贴过来,引号中的完全不要改动,即使class的最后是一个空格),至于为什么用‘//’,可以看路径表达式列表;

subSelector = Selector(text=resp.read()).xpath('//div[@class="nav J_Nav clearfix "]')
 
 

4⃣️’主题市场‘又是一个h2元素,并且整个div中只有一个h2元素,则直接在当前路径(./)下找h2即可,extract()的返回值是一个列表,即使列表中只有一个字符串,所以要zhuti[0],这里‘主题市场’是中文,想要看到汉字,还得解码,so: encode();

#主题市场
zhuti = subSelector.xpath('./h2/text()').extract()
print 'zhuti: ' + zhuti[0].encode('utf-8')
 
 

5⃣️想拿到’天猫‘,发现它在一个ul中的li中的a元素中,并且是这个div中的第一个ul元素,所以直接写路径即可;

#天猫
tianmao = subSelector.xpath('./ul/li/a/text()').extract()
print 'tianmao: ' + tianmao[0].encode('utf-8')
 
 

6⃣️想拿到‘电器城’,它也在一个ul中的li中的a元素中,但是这个ul不是div中的第一个ul元素,于是要通过ul的class来区分,在源代码中找到电器所在ul的class,贴过来,而电器城是ul中的第2个li元素中的,于是取dianqicheng[1];

#电器城
dianqicheng = subSelector.xpath('./ul[@class="nav-bd"]/li/a/text()').extract()
print 'dianqicheng: '+ dianqicheng[1].encode('utf-8')



 
 
 
 



 
 
 
 

 
 
 
 


猜你喜欢

转载自blog.csdn.net/qq_42512064/article/details/81042948