爬虫入门(2)-使用Xpath抓取信息

2017-05-15  本文已影响0人  Maxim_Tian

Python爬虫使用xpath要比re简洁高效的多。

简单例子

访问http://www.jikexueyuan.com/course/?pageNum=1,网站信息如下:

我要做的是爬取网页中课程名称、简介、学习人数和课程难度。以下是代码块:

#!/usr/bin/env python
#-*- coding:utf-8 -*-

from lxml import etree
import requests
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

url = 'http://www.jikexueyuan.com/course/?pageNum=1'
html = requests.get(url)
selector = etree.HTML(html.text)

content_field = selector.xpath('//div[@class="lesson-list"]/ul/li/div[@class="lesson-infor"]')
for each in content_field:
    title = each.xpath('h2/a/text()')[0]
    info = (each.xpath('p/text()')[0]).strip()

    time = (each.xpath('div/div[1]/dl/dd[1]/em/text()')[0]).replace('\t','').replace('\n', ' ')
    number = each.xpath('div/div[1]/em/text()')[0]
    level = each.xpath('div/div[1]/dl/dd[2]/em/text()')[0]
    print title
    print info
    print time
    print number
    print level + '\n'

效果如下

1. 首先分析一下xpath语句

selector.xpath('//div[@class="lesson-list"]/ul/li/div[@class="lesson-infor"]')

锁定一下需要爬取信息的url位置:

找到"lesson-infor",鼠标右键复制'Copy XPath'
得到的语句如下:

//*[@id="3224"]/div[2]

我们需要获取的是所有课程,所以不能用唯一标签
回头看代码:

'//div[@class="lesson-list"]/ul/li/div[@class="lesson-infor"]'

即图中蓝色部分的内容
ps:当某标签下的子标签唯一时可简写/[label]/,如代码中'/div/ul'

2. 接着分析这几句代码:

for each in content_field:
    title = each.xpath('h2/a/text()')[0]
    info = (each.xpath('p/text()')[0]).strip()

注意: xpath返回值是list(写在前头)!!!!

分析就到此
好好学习,天天向上~

上一篇 下一篇

猜你喜欢

热点阅读