美文网首页
爬虫入门(2)-使用Xpath抓取信息

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

作者: Maxim_Tian | 来源:发表于2017-05-15 16:25 被阅读0次

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]

  • ' id="3224" '是唯一标签(课程:腾讯云产品),因此可以写成'//[@id="3224"]/'*
  • ''*表示省略了中间路径
  • '/div[2]'表示li标签下的第二个div标签

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

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

  • 它表示先找到class="lesson-list"标签的内容
  • 再找该div下ul的内容
  • 再找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(写在前头)!!!!

  • 课程标题处在/h2/a/
  • text()表示返回文本内容
  • .[0]表示返回list第一个元素(这个地方新手很容易犯错!!!)
  • 因此' title = each.xpath('h2/a/text()')[0] '获取的是标题内容

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

相关文章

网友评论

      本文标题:爬虫入门(2)-使用Xpath抓取信息

      本文链接:https://www.haomeiwen.com/subject/frrhxxtx.html