美文网首页
python第三天(一) Lxml爬虫

python第三天(一) Lxml爬虫

作者: 敏姐姐_e9d0 | 来源:发表于2018-10-30 12:50 被阅读0次

今天来学习一下Lxml爬虫,收获蛮多的,我把过程分享给大家。希望大家也能和我一起学习python爬虫,丰富自己的知识量,万一那天你就用到了。

  • etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。
  • XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的
  • 如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。

Xpath语法

表达式 描述
nodename 选取此节点的所有子节点。
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

以糗事百科(https://www.qiushibaike.com/text)为例,用Lxml爬虫爬取信息。

先讲一下如何选取节点

id = info.xpath('div[1]/a[2]/h2/text()')

鼠标定位在用户名这里,右击检查,会出现用户名的源代码,此时不要急于粘贴。我们选择Copy-Copy xPath,出现//*[@id="qiushi_tag_121201548"]/div[1]/a[2]/h2,而其中@id="qiushi_tag_121201548"]是精确定位,需要 删除,这样所有用户名都能被我们爬取。得到了上述代码。

from lxml import etree
import requests

url = 'https://www.qiushibaike.com/text/'

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
res = requests.get(url,headers=headers)
html = etree.HTML(res.text)
infos = html.xpath('//div[@class="col1"]/div')
for info in infos:
    id = info.xpath('div[1]/a[2]/h2/text()')
    text = info.xpath('a[1]/div/span[1]/text()')
    laugh = info.xpath('div[2]/span[1]/i/text()')
    comment = info.xpath('div[2]/span[2]/a/i/text()')
    print(id,text,laugh,comment)

最终结果如下:


爬取酷狗top500音乐(http://www.kugou.com/yy/rank/home/1-8888.html?from=rank

import requests
from lxml import etree
import csv

headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}


def get_info(url):
    res = requests.get(url,headers=headers)
    html = etree.HTML(res.text)
    infos = html.xpath('//div[@class="pc_temp_songlist "]/ul/li')
    for info in infos:
        try:
            rank_1 = info.xpath('span[3]')[0]
            rank = rank_1.xpath('string(.)').strip()
            song_singer = info.xpath('a/text()')[0]
            song = song_singer.split(' - ')[1]
            singer = song_singer.split(' - ')[0]
            song_time = info.xpath('span[4]/span/text()')[0].strip()
            print(rank, song,singer,song_time)
            writer.writerow([rank, song,singer,song_time])
        except IndexError:
            pass

if __name__ == '__main__':
    fp = open('C:/Users/luopan/Desktop/kugou.csv', 'w', encoding='utf-8', newline='')
    writer = csv.writer(fp)
    writer.writerow(['rank', 'song','singer','song_time'])
    urls = ['http://www.kugou.com/yy/rank/home/{}-8888.html?from=rank'.format(str(i)) for i in range(1,24)]
    for url in urls:
        get_info(url)

相关文章

网友评论

      本文标题:python第三天(一) Lxml爬虫

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