Stubborn 发表于 2019-9-27 23:42:10

[复习笔记]---Xpath数据解析,大致介绍

本帖最后由 Stubborn 于 2019-9-28 00:22 编辑

前面的帖子已经有介绍了Request,知道如何向一个url发送GET或者POST请求了,然而,当我们得到响应体,是一个HTML体,也就是网页的源码,我们应该怎么提取自己需要的信息呢。

下面贴一个简单的Xpath使用Demo
# -*- coding: utf-8 -*-
# !/usr/bin/python3
"""
Created 2019-9-27
@author: 1263270345@qq.com / Alex
"""
# 如何使用Xpath简单demo
import requests
from lxml import etree
response = requests.get(url="https://movie.douban.com/top250").text
html = etree.HTML(response)
li_list = html.xpath('//ol[@class="grid_view"]/li')
for li in li_list:
    a_href = li.xpath("./div/div/a/@href")
    img_alt = li.xpath("./div/div/a/img/@alt")
    comments_number = li.xpath("./div/div/div/div/span/text()")
    move_comment = li.xpath("./div/div/div/p/span/text()")

下面分享,记得结合简单Demo一起看哦
**** Hidden Message *****

结语,到这里,Xpath介绍完了,渔友们可以结合前面的Request + Xpath来采集网页了。
课后练习题,有兴趣的朋友可以去练习下
        1. 腾讯招聘 数据获取
                采集网址:https://careers.tencent.com/search.html
                采集目标:职位名字 职位简介 工作职责 工作要求
                采集要求:
                        * 必须使用XPath来提取数据
                        * 数据保存到本地,最好是csv
            * 必须使用函数式的编程
       
        2. 豆瓣Top250数据提取
                采集网址:https://movie.douban.com/top250
                采集目标:剧情简介 电影名称 电影图片 电影评分评价人数
                采集要求:
                        * 由于这里介绍已经有代码,所以请尝试,直接xpath需要的内容,不提取li标签对
                        * 必须使用XPath来提取数据
                        * 必须使用函数式编程 尽量使用面向对象式编程
                        * 数据保存到本地,最好是csv

        3. 猫眼电影:
                采集网址:https://maoyan.com/board/4
                采集目标:电影名称 电影图片链接 主演上映时间        电影评分
                采集要求:
                        * 必须使用XPath来提取数据
                        * 必须使用函数式编程 尽量使用面向对象式编程
                        * 数据保存到本地,最好是csv

ykn大神6 发表于 2019-9-28 10:18:00

看看

kaohsing 发表于 2019-9-28 12:02:05

#练习一下

-*- coding: UTF-8 -*-
# =================================================
#      language       : Python3.7
#      IDLE         :pycharm
#      Library needed : lxml,requests
#      Date         :09/28/2019
# =================================================
import csv, time
import requests
from lxml import etree


def get_html(url, headers):
    try:
      r = requests.get(url=url, headers=headers)
      return r.text
    except requests.ConnectionError as e:
      print('Error')


def parsed_data(content):
    movie_list = []
    et = etree.HTML(content)
    info = et.xpath("//div[@class='movie-item-info']")
    score = et.xpath("//div/p")
    img = et.xpath("//img[@class='board-img']/@data-src")
    for e, i, j in zip(info, score, img):
      lst =
      lst.append(''.join(i.xpath('.//i/text()')))
      lst.append(j)
      movie_list.append(lst)
    return movie_list


def write2csv(lst):
    with open("result.csv", "a", newline="") as f:
      writer = csv.writer(f)
      writer.writerows(lst)


def main():
    base_url = r'https://maoyan.com/board/4?offset={}'
    ua = 'Mozilla/5.0 '
    headers = {'User-Agent': ua}
    for i in range(10):
      url = base_url.format(str(i * 10))
      write2csv(parsed_data(get_html(url, headers)))
      time.sleep(1)


if __name__ == '__main__':
    #start = time.time()
    main()
    #print( time.time()- start)

NikoRobin 发表于 2019-10-6 01:52:23

看看

XiaoPaiShen 发表于 2019-10-6 04:12:06

Take a look

当年的小法师 发表于 2019-10-6 11:16:51

学习一下

SweetHunter 发表于 2019-10-6 12:39:19

{:5_91:}一起加油

NikoRobin 发表于 2019-10-6 15:26:04

练习一下:爬豆瓣import requests
from lxml import etree
import csv
import time

# 获取所有页面url,存放到urls列表中
urls = []
def get_url():
    # 爬取页数最大为10
    for i in range(10):
      url = 'https://movie.douban.com/top250?start=%d' % (i*25)
      urls.append(url)

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

# 提取指定数据,存放到datas和imgs列表中
datas = []
imgs = []
i = 1# 电影序号,由开始爬取的页码决定(从第一页开始爬为1,第二页开始为26,第三页开始为51,以此类推)
def get_data():
    global i
    for url in urls:
      response = requests.get(url, headers=headers).text
      html = etree.HTML(response)
      for index in range(1, 26):
            data = []
            title = html.xpath('//ol[@class="grid_view"]/li[%d]//span[@class="title"]/text()' % index)# 电影标题
            try:
                introduction = html.xpath('//ol[@class="grid_view"]/li[%d]//span[@class="inq"]/text()' % index)# 电影简介,没有简介用空字符串替代
            except:
                introduction = ''
            rating = html.xpath('//ol[@class="grid_view"]/li[%d]//span[@class="rating_num"]/text()' % index)# 电影评分
            num = html.xpath('//ol[@class="grid_view"]/li[%d]//div[@class="star"]/span/text()' % index)# 评分人数
            img_link = html.xpath('//ol[@class="grid_view"]/li[%d]//img/@src' % index)# 图片url
            img = requests.get(img_link).content
            data.extend(['No.%d'%i, title, introduction, rating, num])
            datas.append(data)
            imgs.append(img)
            print('\r已获取第 %d 条数据' % i, end='')
            i += 1
      time.sleep(3)

# 保存图片在当前目录下的imgs文件夹中
def save_img():
    i = 1# 图片序号,由开始爬取的页码决定(从第一页开始爬为1,第二页开始为26,第三页开始为51,以此类推)
    for img in imgs:
      with open('imgs/%d.jpg'%i, 'wb') as f:
            f.write(img)
            print('\r已保存第 %d 张图片' % i, end='')
            i += 1

# 保存数据到csv文件中
def save_data():
    headers = ['排名', '电影名', '简介', '评分', '评分人数']
    with open('doubanmovietop250.csv', 'a', encoding='utf-8', newline='') as f:
      f_csv = csv.writer(f)
      f_csv.writerow(headers)
      f_csv.writerows(datas)
      print('\n已保存data')

def main():
    get_url()
    get_data()
    save_data()
    save_img()

if __name__ == '__main__':
    main()

Tghao 发表于 2019-10-8 12:16:03

学xpath的小伙伴最好装个这个插件哦https://xxx.ilovefishc.com/album/201910/08/121426gy9w37ygzyzsclgn.png

neon923 发表于 2019-10-11 08:49:59

学习大神

芒花 发表于 2019-10-21 20:37:31

围观

Y0uWill_1Will 发表于 2019-11-13 14:16:48

学习

羽lovefan 发表于 2019-12-5 16:28:27

谢谢大哥

luoyuxuan 发表于 2019-12-5 21:45:58

kk

slhlde 发表于 2019-12-11 23:11:22

Tghao 发表于 2019-10-8 12:16
学xpath的小伙伴最好装个这个插件哦

可以共享下吗?网上下载的不能用啊

1570843497 发表于 2019-12-13 02:21:58

1

xiaozhang311 发表于 2020-1-5 18:05:37

xiangkan

prettygirl13145 发表于 2020-1-7 18:43:50

谢谢分享

youcke 发表于 2020-1-27 22:29:10

呆家学习

2008ill 发表于 2020-3-2 15:17:13

666
页: [1] 2
查看完整版本: [复习笔记]---Xpath数据解析,大致介绍