python——xpath

xpath介绍

python——xpath_第1张图片

节点关系

python——xpath_第2张图片

python——xpath_第3张图片
python——xpath_第4张图片
python——xpath_第5张图片
python——xpath_第6张图片
python——xpath_第7张图片
在这里插入图片描述

xpath快捷键chrome

在这里插入图片描述
python——xpath_第8张图片
python——xpath_第9张图片
python——xpath_第10张图片
python——xpath_第11张图片
python——xpath_第12张图片
python——xpath_第13张图片
python——xpath_第14张图片
python——xpath_第15张图片
在这里插入图片描述

lxml模块使用

python——xpath_第16张图片
python——xpath_第17张图片
python——xpath_第18张图片
在这里插入图片描述

把数据存储到字典并保存csv

在这里插入图片描述
python——xpath_第19张图片

换一种方法取result的索引——index()

python——xpath_第20张图片
python——xpath_第21张图片

结果取到了:

python——xpath_第22张图片
python——xpath_第23张图片

豆瓣 top250 翻页爬取 链接、名字、评分、引言

python——xpath_第24张图片
python——xpath_第25张图片
python——xpath_第26张图片
python——xpath_第27张图片
python——xpath_第28张图片
python——xpath_第29张图片
python——xpath_第30张图片
python——xpath_第31张图片
python——xpath_第32张图片
python——xpath_第33张图片

拼接字符串

python——xpath_第34张图片
python——xpath_第35张图片
在这里插入图片描述
python——xpath_第36张图片

结果出来有[],所以可以进行处理索引取值,做非空判断

python——xpath_第37张图片

f’{}'和{}.format()区别

python——xpath_第38张图片
python——xpath_第39张图片
python——xpath_第40张图片

代码总汇:

from lxml import etree
import csv
import requests

# https://movie.douban.com/top250 第一页
# https://movie.douban.com/top250?start=25&filter= 第二页
# https://movie.douban.com/top250?start=50&filter= 第三页
# 所以第一页为:https://movie.douban.com/top250?start=50
# 规律:(page-1)*25

#
doubanUrl = 'https://movie.douban.com/top250?start={}'


def getSource(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36'
    }
    resp = requests.get(url, headers=headers)
    resp.encoding = 'utf-8'
    return resp.text


def geteveryItem(source):
    html_element = etree.HTML(source)
    movieItem = html_element.xpath('//div[@class="info"]')
    movieLst = []
    for eachMovie in movieItem:
        movieDict = {}
        # 电影名字
        title = eachMovie.xpath('./div[@class="hd"]/a/span[@class="title"]/text()')
        # 电影别名
        title2 = eachMovie.xpath('./div[@class="hd"]/a/span[@class="other"]/text()')
        # 评分  或者这样写://div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]
        score = eachMovie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')
        if score:
            score = score[0]
        else:
            score = ''
        # 导语
        introd = eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()')
        if introd:
            introd = introd[0]
        else:
            introd = ''
        # 链接url
        links = eachMovie.xpath('./div[@class="hd"]/a/@href')
        if links:
            links = links[0]

        movieDict['名称'] = ''.join(title + title2)
        movieDict['评分'] = score
        movieDict['导语'] = introd
        movieDict['链接'] = links
        movieLst.append(movieDict)
    return movieLst


def saveData(movieLst):
    with open('豆瓣top250', 'w', encoding='utf-8', newline='')as f:
        dwriter = csv.DictWriter(f, fieldnames=['名称', '评分', '导语', '链接'])
        dwriter.writeheader()
        dwriter.writerows(movieLst)


if __name__ == '__main__':
    movieLst = []
    for i in range(10):
        yeshu = doubanUrl.format(i * 25)
        source = getSource(yeshu)  # 在上面取完整的url后在这里爬取html,调用getSource函数
        movieLst += geteveryItem(source)  #把上面取到的完整25页html赋值到解析函数geteveryItem,并将它的值传给movieLst
    saveData(movieLst)

你可能感兴趣的:(python爬虫笔记,xpath,python,csv)