Python爬虫爬取豆瓣电影之数据提取值

发布时间:2019-03-13 22:47:03编辑:auto阅读(2733)

    工具Python 3.6.5、PyCharm开发工具、Windows 10 操作系统、谷歌浏览器

    目的:爬取豆瓣电影排行榜中电影的title、链接地址、图片、评价人数、评分等

    网址:https://movie.douban.com/chart

    语法要点

    xpath语法:

    谷歌浏览器安装 xpath helper插件:帮助我们从elements中定位数据

    1、选择节点(标签)

      (1)、/html/head/meta:能够选中html下的所有的meta标签

      (2)、//li:当前页面上的所有的li标签

      (3)、/html/head//link:head下的所有link标签

    2、//:能够从任意节点开始选择

      (1)、//li:当前页面上的所有的li标签

      (2)、/html/head//link:head下的所有的link标签

    3、@符号的用途

      (1)、选择具体某个元素://div[@class='feed']/ul/li,选择class='feed'的div下的ul下的li

      (2)、a/@href:选择a的href的值

    4、获取文本

      (1)、/a/text():获取a下的文本

      (2)、/a//text():获取a下的所有文本

    示例

     

    lxml语法:

    1、安装:pip install lxml

    2、使用

      from lxml import etree

      element = etree.HTML("html字符串")

      element.xpath("")

    代码:

     1 from lxml import etree
     2 import requests
     3 
     4 url = "https://movie.douban.com/chart"
     5 
     6 headers = {
     7 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.81 Safari/537.36"
     8 }
     9 response = requests.get(url,headers=headers)
    10 html_str = response.content.decode()
    11 
    12 #print(html_str)
    13 
    14 html = etree.HTML(html_str)
    15 print(html)
    16 
    17 #1.获取所有的电影的URL地址
    18 #url_list = html.xpath("//div[@class='indent']/div/table//div[@class='pl2']/a/@href")
    19 #print(url_list)
    20 
    21 #2.所有图片的地址
    22 #img_list = html.xpath("//div[@class='indent']/div/table//a[@class='nbg']/img/@src")
    23 #print(img_list)
    24 ret1 = html.xpath("//div[@class='indent']/div/table")
    25 print(ret1)
    26 for table in ret1:
    27     item = {}
    28     item["title"] = table.xpath(".//div[@class='pl2']/a/text()")[0].replace("/","").strip()
    29     item["href"] = table.xpath(".//div[@class='pl2']/a/@href")[0]
    30     item["img"] = table.xpath(".//a[@class='nbg']/img/@src")[0]
    31     item["comment_num"] = table.xpath(".//span[@class='pl']/text()")[0]
    32     item["rating_num"] = table.xpath(".//span[@class='rating_nums']/text()")[0]
    33     print(item)
    34     

    运行效果:

     

关键字