精华内容
下载资源
问答
  • 里面的内容导出保存为word.该怎么做呢,求高手指点。万分感谢! ```真心求解,如有解决问题者,定当重谢! 我又作了这样的尝试, ``` protected void Page_Load(object sender, EventArgs e) ...
  • 然后获取的信息保存文本文件。 2.网页分析 要爬取的网页为猫眼电影TOP100(http://maoyan.com/board/4),网页页面如下所示: 看一下页面的显示规律是怎样的,一页是显示10部电影名称。第二页的...

    1.概述

    使用Requests库和正则表达式爬取猫眼电影TOP100中的电影信息,包括电影名称、主演、上映时间、评分、图片等信息。然后将获取的信息保存到文本文件。

    2.网页分析

    要爬取的网页为猫眼电影TOP100 http://maoyan.com/board/4
    网页页面如下所示:
    猫眼TOP100
    看一下页面的显示规律是怎样的,一页是显示10部电影名称。第二页的url和内容如下所示:url为:http://maoyan.com/board/4?offset=10
    可以看出和第一页的url的主要差别为后面的offset,要抓取后面的网页的内容,只要在url后面加上相应的offset参数就可以了。
    第二页

    3.请求网页

    首先请求一个页面,通过requests中的get方法,请求网页。

    # 获取单个页面
    def get_one_page(url):
        try:
            # 添加头部信息
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
            }
            response = requests.get(url, headers=headers)
            # 进行状态码判断,是否正确读取到网页
            if response.status_code == 200:
                return response.text
            return None
        except RequestException:
            return None
    

    测试是否成功获取到网页的页面信息。

    def main():
        url = 'http://maoyan.com/board/4'
        html = get_one_page(url)
        print(html)
    

    3.正则表达式

    获取到网页的信息之后,就需要用正则表达式来解析网页,抓取我们所需要的信息;打开浏览器的审查元素功能,查看网页的源码,查找我们需要抓取的信息在哪个位置。
    TOP100源码
    以第一个电影为例:分析源码。可以看到我们所需要的信息都包含在下面的html代码中。

        <dd>
        <i class="board-index board-index-1">1</i>
        <a href="/films/1203" title="霸王别姬" class="image-link" data-act="boarditem-click" data-val="{movieId:1203}">
        <img src="//ms0.meituan.net/mywww/image/loading_2.e3d934bf.png" alt="" class="poster-default" />
        <img data-src="http://p1.meituan.net/movie/20803f59291c47e1e116c11963ce019e68711.jpg@160w_220h_1e_1c" alt="霸王别姬" class="board-img" />
        </a>
        <div class="board-item-main">
          <div class="board-item-content">
                  <div class="movie-item-info">
            <p class="name"><a href="/films/1203" title="霸王别姬" data-act="boarditem-click" data-val="{movieId:1203}">霸王别姬</a></p>
            <p class="star">
                    主演:张国荣,张丰毅,巩俐
            </p>
    <p class="releasetime">上映时间:1993-01-01(中国香港)</p>    </div>
        <div class="movie-item-number score-num">
    <p class="score"><i class="integer">9.</i><i class="fraction">6</i></p>        
        </div>
    
          </div>
        </div>
    
      </dd>
    

    一个电影的信息都包含在<dd>标签中,我们需要从中抓取图片、名称、主演、上映时间、评分等信息。通过正则表达式来实现:

    # 解析网页
    def parse_one_page(html):
        pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?src="(.*?)".*?name"><a'
                             +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                             +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
        items = re.findall(pattern, html)
        # print(items)
        for item in items:
            yield {
                'index': item[0],
                'image': item[1],
                'title': item[2],
                'actor': item[3].strip()[3:],
                'time': item[4].strip()[5:],
                'score': item[5] + item[6]
            }
    
    '<dd>.*?board-index.*?>(\d+)</i>.*?src="(.*?)".*?name"><a'
    +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
    +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>'
    

    这串字符串就是我们用到的正则表达式,先从<dd>标签开始进行匹配,首先匹配的board-index,表示是电影的排名信息,用非贪婪匹配来提取i节点中的信息;接下来匹配图片的链接信息,保存在src标签中,然后通过name属性匹配电影的名称,再去p标签中查找star属性,得到主演的信息,后面接着获取releasetime发行时间和评分的信息。

    4.保存

    正则表达式写好之后,可以先测试输出一下,看得到的是否是我们想要的信息,如果信息无误就把信息用文本保存下来。
    这里通过JSON库的dumps()方法实现字典的序列化,并指定ensure_ascii参数为False,这样可以保证输出结果是中文形式而不是Unicode编码。

    # 将抓取的内容保存到文件
    def write_to_file(content):
        with open('result.txt', 'a', encoding='utf-8') as f:
            f.write(json.dumps(content, ensure_ascii=False) + '\n')
            f.close()
    

    完整代码

    完整的python代码如下,后面使用Pool进程池,多进程来提升代码的抓取效率。

    import requests
    from requests.exceptions import RequestException
    import re
    import json
    from multiprocessing import Pool
    
    # 获取单个页面
    def get_one_page(url):
        try:
            # 添加头部信息
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'
            }
            response = requests.get(url, headers=headers)
            # 进行状态码判断,是否正确读取到网页
            if response.status_code == 200:
                return response.text
            return None
        except RequestException:
            return None
    
    # 解析网页
    def parse_one_page(html):
        pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?src="(.*?)".*?name"><a'
                             +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                             +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>', re.S)
        items = re.findall(pattern, html)
        # print(items)
        for item in items:
            yield {
                'index': item[0],
                'image': item[1],
                'title': item[2],
                'actor': item[3].strip()[3:],
                'time': item[4].strip()[5:],
                'score': item[5] + item[6]
            }
    
    # 将抓取的内容保存到文件
    def write_to_file(content):
        with open('result.txt', 'a', encoding='utf-8') as f:
            f.write(json.dumps(content, ensure_ascii=False) + '\n')
            f.close()
    
    def main(offset):
        url = 'http://maoyan.com/board/4?offset=' + str(offset)
        html = get_one_page(url)
        # print(html)
        # parse_one_page(html)
        for item in parse_one_page(html):
            print(item)
            write_to_file(item)
    
    if __name__ == '__main__':
        pool = Pool()
        pool.map(main, [i*10 for i in range(10)])
        # for i in range(10):
          # main(i*10)
    
    

    最终运行结果如下:
    运行结果

    展开全文
  • 在XML中,就是要将网页也作为一个对象来操作和控制,我们可以建立自己的对象和模板。与对象进行交流,如何命令对象,就要用到API。API全称Application Programming Interface,它是访问和操作对象的规则。而DOM就是...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0090 使用Uppercase函数小写字母转换大写字母 64 0091 使用Lowercase函数大写字母转换小写字母 64 0092 使用Copy函数获取一个字符串的子串 64 0093 使用LeftStr函数从左边取得指定个数的字符串 65 ...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    59、过滤网页内容 91 60、快速转换大写金额 92 61、去掉自动编号功能 92 62、去除绘图时出现的画布 92 63、巧用“格式刷” 92 64、部分加粗表格线 92 65、隐藏累赘的文字 92 66、长文档前后比照有妙招 92 67、让标尺...
  • 注:本系列图书的第I、II卷再版时均相应改名《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Visual C++开发实战1200例》分为I、II两卷共计1200个例子,包括...
  • 注:本系列图书的第I、II卷再版时均相应改名《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的童鞋可自由匹配查找。 内容简介  《Visual C++开发实战1200例》分为I、II两卷共计1200个例子,包括...
  • 实例287 数据库内容导出为文本文件 377 8.9 数据库其他操作 379 实例288 系统错误记录 379 实例289 如何图片从数据库中提取出来 380 实例290 原生ADO应用技术 381 实例291 标准记录编辑界面 383 ...
  • 15.1.2 应该只数据科学家提供一种工具来解决所有问题 167 15.1.3 应该为了分析而分析 169 15.1.4 应该学会分享 169 15.1.5 应该期望数据科学家无所不能 170 15.2 数据学家在机构中的位置 170 15.3 最后的...
  • 问题11 如何最简多项式的字符串转换系数向量 102 问题12 如何抓取网页中的图片 103 第2章 文件I/O 104 2.1 知识点归纳 104 2.1.1 高级文件I/O操作 104 2.1.2 低级文件I/O操作 121 2.2 重难点讲解 134 ...
  • 实例148 文字保存为图片 215 4.10 图像应用 215 实例149 随机更换壁纸程序 216 实例150 屏幕保护 217 实例151 模拟石英钟 219 实例152 生肖速查 221 第5章 多媒体技术 225 5.1 CD、VCD播放 226 实例...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    55 <br>0076 约瑟夫环问题 56 <br>0077 猴子选大王 57 <br>0078 如何判断IP是否正确 57 <br>0079 如何小写金额转换大写金额 57 <br>0080 统计文本字数 58 <br>0081 文本中首字母改...
  • C#.net_经典编程例子400个

    热门讨论 2013-05-17 09:25:30
    207 实例144 获取指定点的RGB值 207 4.9 图像工具 208 实例145 获取图片类型 208 实例146 简单画图程序 209 实例147 看图工具 213 实例148 文字保存为图片 215 4.10 图像应用 ...
  • asp.net知识库

    2015-06-18 08:45:45
    ASP.NET 2.0 应用程序服务配置使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...
  • $a xor $b :异或 (当$a或$btrue时true,两者一样时false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a $b :小于 $a $b :小于等于 $a > $b :大于 $a >= $b :大于等于 与C一样PHP也有...
  • 实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 5.1 CD、VCD播放 ...
  • 程序开发范例宝典>>

    2012-10-24 10:41:28
    实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 ...
  • C#程序开发范例宝典(第2版).part02

    热门讨论 2012-11-12 07:55:11
    实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 5.1 CD、...
  • C#程序开发范例宝典(第2版).part13

    热门讨论 2012-11-12 20:17:14
    实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 5.1 CD、...
  • 实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 5.1 CD、...
  • 实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 5.1 CD、...
  • 实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 ...
  • C#程序开发范例宝典

    2010-12-15 20:05:16
    实例148 文字保存为图片...... 215 4.10 图像应用...... 215 实例149 随机更换壁纸程序...... 216 实例150 屏幕保护...... 217 实例151 模拟石英钟...... 219 实例152 生肖速查...... 221 第5章 多媒体...
  • 实例170 文字保存为图片 240 实例171 捕获屏幕 241 4.10 图像应用 243 实例172 随机更换壁纸程序 243 实例173 屏幕保护 244 实例174 模拟石英钟 247 实例175 生肖速查 249 第5章 多媒体技术 251 ...
  • 正则表达式

    2014-12-03 14:51:39
    (x) 匹配x保存x在名$1...$9的变量中 x|y 匹配x或y {n} 精确匹配n次 {n,} 匹配n次以上 {n,m} 匹配n-m次 [xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符) [^xyz] 不匹配这个集合中的任何一个...
  • 4.7.1 SQL缓冲区内容保存到文件中 95 4.7.2 在SQL*Plus中执行SQL脚本 95 4.7.3 创建Windows的批处理脚本 97 4.7.4 DEFINE和UNDEFINE命令 97 4.7.5 预定义SQL*Plus变量 97 4.7.6 在SQL*Plus中使用注释 ...
  • 556,delay1.zip 源码设计中的延时功能(1KB) 557,type_1.zip 趣味打字2.1(233KB) 558,test1.zip asp编写动态网页计数器(1KB) 559,hztosm.zip 汉字转声母完全源代码(90KB) 560,...
  • 556,delay1.zip 源码设计中的延时功能(1KB) 557,type_1.zip 趣味打字2.1(233KB) 558,test1.zip asp编写动态网页计数器(1KB) 559,hztosm.zip 汉字转声母完全源代码(90KB) 560,...
  • 556,delay1.zip 源码设计中的延时功能(1KB) 557,type_1.zip 趣味打字2.1(233KB) 558,test1.zip asp编写动态网页计数器(1KB) 559,hztosm.zip 汉字转声母完全源代码(90KB) 560,...

空空如也

空空如也

1 2
收藏数 29
精华内容 11
关键字:

怎样将网页内容保存为文本