栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

爬虫:将已获得网页的全部数据进行拆分,再进行解析

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

爬虫:将已获得网页的全部数据进行拆分,再进行解析

文章目录
  • 一、问题描述
  • 二、问题思路
  • 三、问题解决

一、问题描述

上篇文章中描述了获取整个网页的html信息代码,可我们就只想获取我们想要的那部分信息,该怎么办呢?

二、问题思路
  1. 引入所需数据库
  2. 先将数据进行拆分
  3. 再进行数据的解析
三、问题解决

以获取豆瓣第一个网页电影信息(影片详情连接、影片图片、影片片名、影片评价、评价人数、电影概况、影片相关内容)为例

import urllib.request                 # 获取整个网页信息所需库
from bs4 import BeautifulSoup         # 数据拆分所需库
import re                             # 数据解析所需库

# 一. 获取整个网页的html
#得到指定一个URL的网页内容
#方法一:获取一个get请求
# HTTP Error 418:对方已发现我是一个爬虫,所以要进行伪装
url = "https://movie.douban.com/top250?start="
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36",
}                                             #模拟头部信息,向服务器发送消息
req = urllib.request.Request(url=url,headers=headers)#封装
try:
    response = urllib.request.urlopen(req)
    html = response.read().decode('utf-8')    #对获取网页进行utf-8的解码
    #print(html)
except urllib.error.URLError as e:            #try except 进行超时设置
    print("timeout")


# 二:对整个网页进行数据拆分与数据解析

datalist = []
soup = BeautifulSoup(html,"html.parser")

for item in soup.find_all("div", class_="item"):
        #print(item)#测试:查看电影item全部信息

        data = [] #保存一部电影的所有信息
        item = str(item)

        # 1.影片详情链接规则
        findLink = re.compile(r'')  # 创建正则表达式对象,表示规则(字符串的模式)
        #添加影片详情连接
        link = re.findall(findLink,item)[0]  #re库用来通过正则表达式查找指定的字符串
                                                         #j将findLink放入全局变量里定义
        data.append(link)
        #print(link)



        # 2.影片图片规则
        findImageSrc = re.compile(r', re.S)  # re.S让换行符包含在字符中
        #添加影片图片
        imageSrc = re.findall(findImageSrc,item)[0]
        data.append(imageSrc)
        #print(imageSrc)



        # 3.影片片名规则
        findTitle = re.compile(r'span >(.*)')
        #添加影片片名
        title = re.findall(findTitle,item)#[0]  错误
        if (len(title) == 2):
                ctitle = title[0]
                data.append(ctitle)                  #添加中文名
                otitle = title[1].replace("/","")    #去掉无关的符号
                data.append(otitle)                  #添加外国名
        else:
                data.append(title[0])
                data.append(' ')    #外国名可能没有,则留空




        # 4.影片评分规则
        findRating = re.compile(r'(.*)')
        #添加评分
        rating = re.findall(findRating,item)[0]
        data.append(rating)




        # 5.找到评价人数规则
        findJudge = re.compile(r'(d*)人评价')
        #添加评价人数
        judge = re.findall(findJudge,item)[0]
        data.append(judge)




        # 6.电影概况规则
        findInq = re.compile(r'(.*)', )
        # 添加电影概况
        inq = re.findall(findInq,item)
        if len(inq) != 0:               #这里报错
                inq = inq[0].replace("。","") #去掉句号
                data.append(inq)
        else:
                data.append(" ")    #留空




        # 7.影片相关内容
        findBd = re.compile(r'

(.*?)

', re.S) # 添加影片相关内容 bd = re.findall(findBd,item)[0] bd = re.sub('(s+)?'," ",bd) #去掉
bd = re.sub('/'," ",bd) #去掉/ data.append(bd.strip()) #去掉前后的空格 datalist.append(data) print(datalist) #打印所有过滤掉的信息

程序运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/961153.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号