Python爬虫——XPath的使用(B)

使用XPath爬取豆瓣电影的信息

1.下载lxml库

lxml是一个非常重要的库,后面的Beautiful Soup、Scrapy框架都需要用到此库,XPath是一个解析语言,只有安装解析库才可以对网页数据进行解析
      方法一:在cmd中输入 pip install lxml
      方法二:在pycharm的setting中添加 lxml

2.导入需要的库

# 导入需要的库
import requests
from lxml import etree
import re

3.网页操作

①公式五步走:地址+头+request.get获得的的text+etree.HTML(html)+selector.xpath(“xxx”)
   即 url +
       headers +
       html=requests.get(url,headers=headers).text+
       selector=etree.HTML(html)+
       lis=selector.xpath(“xxx”)
②XPath的用法详情见这里

完整代码为:

from lxml import etree
import requests
import re

url="https://movie.douban.com/top250"
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"}
html = requests.get(url, headers=header).text
selector = etree.HTML(html)
lis = selector.xpath('//ol[@class="grid_view"]/li')
allMovieList = []
for oneSelector in lis:
        name = oneSelector.xpath("div/div[2]/div[1]/a/span[1]/text()")[0]
        score = oneSelector.xpath("div/div[2]/div[2]/div/span[2]/text()")[0]
        people = oneSelector.xpath("div/div[2]/div[2]/div/span[4]/text()")[0]
        people = re.findall("(.*?)人评价", people)[0]
        # people = re.sub('\D','',people)
        oneMovieList = [name, score, people]
        allMovieList.append(oneMovieList)
print(allMovieList)


运行结果为
在这里插入图片描述

4.上述代码中细节分析

①title中[0],   score中[0],   people中[0]的作用

只保留文字部分,去除中括号和引号
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②people = re.findall("(.*?)人评价", people)[0]

报错:

people = oneSelector.xpath("div/div[2]/div[2]/div/span[4]/text()")
# ['1948578人评价']
people = re.findall("(.*?)人评价", people)[0]
# 报错

正确运行:

people = oneSelector.xpath("div/div[2]/div[2]/div/span[4]/text()")[0]
# 1948578人评价
people = re.findall("(.*?)人评价", people)[0]
# 1948578

要使用正则表达式re.findall()方法的前提是不含有中括号或则引号之类的符号,否则就会报错

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值