精华内容
下载资源
问答
  • 2021-02-04 10:57:04

    第1章 爬虫网络概述

    1.1 HTTP基本原理

    1.1.1 URL和URL

    1.1.2 超文本

    1.1.3 HTTP和HTTPS

    1.1.4 HTTP请求过程

    1.1.5 请求

    1.1.6 响应

    1.2 网页基础

    1.2.1 网页的组成

    1.2.2 节点树及节点间的关系

    1.2.3 选择器

    1.3 网络爬虫合法性

    1.3.1 Robots协议

    1.3.2 网络爬虫的约束

    第1章 爬虫网络概述

    1.1 HTTP基本原理

    1.1.1 URL和URL

    1.1.2 超文本

    1.1.3 HTTP和HTTPS

    1.1.4 HTTP请求过程

    1.1.5 请求

    1.1.6 响应

    1.2 网页基础

    1.2.1 网页的组成

    1.2.2 节点树及节点间的关系

    1.2.3 选择器

    1.3 网络爬虫合法性

    1.3.1 Robots协议

    1.3.2 网络爬虫的约束

    1.4 网络爬虫技术

    1.4.1 网络爬虫的概述

    1.4.2 网络爬虫原理

    1.4.3 网络爬虫系统的工作原理

    1.4.4 Python爬虫的架构

    1.4.5 爬虫对互联网进行划分

    1.5 爬取策略

    1.6 爬虫网络 新策略

    1.7 会话和Cookie

    1.7.1 静态网页和动态网页

    1.7.2 无状态HTTP

    1.7.3 常见误区

    1.8 代理的基本原理

    1.8.1 基本原理

    1.8.2 代理的作用

    1.8.3 爬虫代理

    1.8.4 代理分类

    1.8.5 常见代理设置

    1.9 习题

    第2章 Python平台及Web前端

    2.1 Python软件概述

    2.2 Python的安装

    2.2.1 在Linux系统中搭建Python环境

    2.2.2 在Windows系统中搭建Python环境

    2.2.3 使用pip安装第三方库

    2.3 Python的入门

    2.3.1 基本命令

    2.3.2 数据类型

    2.4 条件语句与循环语句

    2.4.1 条件语句

    2.4.2 循环语句

    2.5 面向对象编程

    2.5.1 面向对象技术简介

    2.5.2 类定义

    2.5.3 类对象

    更多相关内容
  • Scratch,是抓取的意思,这个Python爬虫框架叫Scrapy,大概也是这个意思吧,就叫它:小刮刮吧。 小刮刮是一个为遍历爬行网站、分解获取数据而设计的应用程序框架,它可以应用在广泛领域:数据挖掘、信息处理和或者...
  • 1.7 Python 爬虫相关库 2 Chrome 浏览器开发者工具10 2.1 Chrome 浏览器开发者工具简述. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.1.1 什么是浏览器开发者工具. . . . . . . . . . . . . ...
  • Python网络爬虫实战.pdf

    2019-07-12 08:54:19
    本书共8章,涵盖的内容有Python语言的基本语法、Python常用IDE的使用、Python第三方模块的导入使用、Python爬虫常用模块、Scrapy爬虫、Beautiful Soup爬虫、Mechanize模拟浏览器和Selenium模拟浏览器。本书所有源...
  • 本书共8章,涵盖的内容有Python语言的基本语法、Python常用IDE的使用、Python第三方模块的导入使用、Python爬虫常用模块、Scrapy爬虫、Beautiful Soup爬虫、Mechanize模拟浏览器和Selenium模拟浏览器。本书所有源...
  • Python网络爬虫案例:维基百科 1.项目描述 本案例的目标是爬取维基百科上的词条连接。爬虫深度设置为两层。 网络蜘蛛:是通过网页的链接地址寻找网页的,从网站某一个页面(通常是首页)开始读取网页的内容,找到...

    Python网络爬虫案例:维基百科

    1.项目描述

    本案例的目标是爬取维基百科上的词条连接。爬虫深度设置为两层。

    网络蜘蛛:是通过网页的链接地址寻找网页的,从网站某一个页面(通常是首页)开始读取网页的内容,找到在网页中其他链接地址,然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止。

    如何把整个网站的所有网页都爬取一遍呢?涉及到两个基本算法:基于深度优先的遍历和基于广度优先的遍历。

    2.网站分析

    网页首页为:https://en.wikipedia.org/wiki/Wikipedia

    首先,分析词条链接的特点;

    然后,得到该页面的所有链接:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @File  : GetLink.py
    @Author: Xinzhe.Pang
    @Date  : 2019/7/18 20:44
    @Desc  : 
    """
    import requests
    from bs4 import BeautifulSoup
    
    url = "https://en.wikipedia.org/wiki/Wikipedia"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
    
    r = requests.get(url, headers=headers)
    html = r.text
    bsObj = BeautifulSoup(html)
    
    for link in bsObj.find_all("a"):
        if 'href' in link.attrs:
            print(link.attrs['href'])
    

    通过分析,可以发现所有词条的链接有两个特点:

    (1)URL链接是以/wiki/开头的相对路径;

    (2)URL链接不包括冒号、#、=、<、>。

    这里,直接用正则表达式从网页HTML代码中提取需要的词条链接,正则表达式为<a href="/wiki/([^:#=<>]*?)".*?</a>。

    3.深度优先的递归爬虫

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @File  : DeepFirst.py
    @Author: Xinzhe.Pang
    @Date  : 2019/7/18 21:13
    @Desc  : 
    """
    import requests
    import re
    
    exist_url = []  # 存放已爬取的网页
    g_writecount = 0
    
    
    def scrappy(url, depth=1):
        global g_writecount
        try:
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
            url = "https://en.wikipedia.org/wiki/" + url
            r = requests.get(url, headers=headers)
            html = r.text
        except Exception as e:
            print('Failed downloading and saving', url)
            print(e)
            exist_url.append(url)
            return None
    
        exist_url.append(url)
        link_list = re.findall('<a href="/wiki/([^:#=<>]*?)".*?</a>', html)
        # 去掉已爬链接和重复链接
        unique_list = list(set(link_list) - set(exist_url))
    
        # 把所有链接写出到txt文件
        for eachone in unique_list:
            g_writecount += 1
            output = "No." + str(g_writecount) + "\t Depth:" + str(depth) + "\t" + url + ' -> ' + eachone + '\n'
            print(output)
            with open('link_12-3.txt', "a+") as f:
                f.write(output)
    
            # 只获取两层,"Wikipedia"算第一层
            if depth < 2:
                # 递归调用自己来访问下一层
                scrappy(eachone, depth + 1)
    
    scrappy("Wikipedia")
    

    每一个新获取的链接都有要先保存到TXT文件中,再使用递归函数调用。

    4.广度优先的多线程爬虫

    多线程爬虫配合广度优先算法正好。广度优先的遍历算法以层为顺序,将某一层上的所有节点都搜索到了之后才向下一层搜索,可以有大量词条链接放入多线程爬虫的队列中。

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    """
    @File  : BreadthFirst.py
    @Author: Xinzhe.Pang
    @Date  : 2019/7/18 21:34
    @Desc  : 
    """
    import re
    import time
    import threading
    import requests
    
    g_mutex = threading.Condition()
    g_pages = []  # 从中解析所有urll链接
    g_queueURL = []  # 等待爬取的url链接列表
    g_existURL = []  # 已经爬取过的url链接列表
    g_writecount = []  # 找到的链接数
    
    
    class Crawler:
        def __init__(self, url, threadnum):
            self.url = url
            self.threadnum = threadnum
            self.threadpool = []
    
        # 爬虫的控制大脑,包括爬取网页,更新队列
        def craw(self):
            global g_queueURL
            g_queueURL.append(url)
            depth = 1
            while (depth < 3):
                print('Searching depth ', depth, '...\n')
                self.downloadAll()
                self.updateQueueURL()
                g_pages = []
                depth += 1
    
        # 调用多线程爬虫,在小于线程最大值和没爬完队列之前会增加线程
        def downloadAll(self):
            global g_queueURL
            i = 0
            while i < len(g_queueURL):
                j = 0
                while j < self.threadnum and i + j < len(g_queueURL):
                    threadresult = self.download(g_queueURL[i + j], j)
                    j += 1
                i += j
                for thread in self.threadpool:
                    thread.join(30)
                threadpool = []
            g_queueURL = []
    
        # 调用多线程爬虫
        def download(self, url, tid):
            crawthread = CrawlerThread(url, tid)
            self.threadpool.append(crawthread)
            crawthread.start()
    
        # 完成一个深度的爬虫之后更新队列
        def updateQueueURL(self):
            global g_queueURL
            global g_existURL
            newUrlList = []
            for content in g_pages:
                newUrlList += self.getUrl(content)
            g_queueURL = list(set(newUrlList) - set(g_existURL))
    
        # 从获取的网页中解析url
        def getUrl(self, content):
            link_list = re.findall('<a href="/wiki/([^:#=<>]*?)".*?</a>', content)
            unique_list = list(set(link_list))
            return unique_list
    
    
    # 爬虫线程
    class CrawlerThread(threading.Thread):
        def __init__(self, url, tid):
            threading.Thread.__init__(self)
            self.url = url
            self.tid = tid
    
        def run(self):
            global g_mutex
            global g_writecount
            try:
                print(self.tid, "crawl ", self.url)
                headers = {
                    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
                r = requests.get("https://en.wikipedia.org/wiki/" + self.url, headers=headers)
                html = r.text
    
                link_list2 = re.findall('<a href="/wiki/([^:#=<>]*?)".*?</a>', html)
                unique_list2 = list(set(link_list2))
                for eachone in unique_list2:
                    g_writecount += 1
                    content2 = "No." + str(g_writecount) + "\t Thread:" + str(
                        self.tid) + "\t" + self.url + ' -> ' + eachone + '\n'
                    with open('title2.txt', "a+") as f:
                        f.write(content2)
                        f.close()
            except Exception as e:
                g_mutex.acquire()
                g_existURL.append(self.url)
                g_mutex.release()
                print('Failed downloading and saving', self.url)
                print(e)
                return None
            g_mutex.acquire()
            g_pages.append(html)
            g_existURL.append(self.url)
            g_mutex.release()
    
    
    if __name__ == "__main__":
        url = "Wikipedia"
        threadnum = 5
        crawler = Crawler(url, threadnum)
        crawler.craw()
    

    补充说明:由于网络问题,无法登录https://en.wikipedia.org/wiki/Wikipedia,所以,上述代码仅供学习参考。如果有条件,可以考虑翻墙之后再行实验。

    参考资料:《Python网络爬虫从入门到实践》

    展开全文
  • 目录前 言第一篇 理论基础篇第1章 什么是网络爬虫 31.1 初识网络爬虫 31.2 为什么要学网络爬虫 41.3 网络爬虫的组成 51.4 网络爬虫的类型 61.5 爬虫扩展——聚焦爬虫 71.6 小结 8第2章 网络爬虫技能总览 ...

    目录

    前 言

    第一篇 理论基础篇

    第1章 什么是网络爬虫 3

    1.1 初识网络爬虫 3

    1.2 为什么要学网络爬虫 4

    1.3 网络爬虫的组成 5

    1.4 网络爬虫的类型 6

    1.5 爬虫扩展——聚焦爬虫 7

    1.6 小结 8

    第2章 网络爬虫技能总览 9

    2.1 网络爬虫技能总览图 9

    2.2 搜索引擎核心 10

    2.3 用户爬虫的那些事儿 11

    2.4 小结 12

    第二篇 核心技术篇

    第3章 网络爬虫实现原理与实现技术 15

    3.1 网络爬虫实现原理详解 15

    3.2 爬行策略 17

    3.3 网页更新策略 18

    3.4 网页分析算法 20

    3.5 身份识别 21

    3.6 网络爬虫实现技术 21

    3.7 实例——metaseeker 22

    3.8 小结 27

    第4章 Urllib库与URLError异常处理 29

    4.1 什么是Urllib库 29

    4.2 快速使用Urllib爬取网页 30

    4.3 浏览器的模拟——Headers属性 34

    4.4 超时设置 37

    4.5 HTTP协议请求实战 39

    4.6 代理服务器的设置 44

    4.7 DebugLog实战 45

    4.8 异常处理神器——URLError实战 46

    4.9 小结 51

    第5章 正则表达式与Cookie的使用 52

    5.1 什么是正则表达式 52

    5.2 正则表达式基础知识 52

    5.3 正则表达式常见函数 61

    5.4 常见实例解析 64

    5.5 什么是Cookie 66

    5.6 Cookiejar实战精析 66

    5.7 小结 71

    第6章 手写Python爬虫 73

    6.1 图片爬虫实战 73

    6.2 链接爬虫实战 78

    6.3 糗事百科爬虫实战 80

    6.4 微信爬虫实战 82

    6.5 什么是多线程爬虫 89

    6.6 多线程爬虫实战 90

    6.7 小结 98

    第7章 学会使用Fiddler 99

    7.1 什么是Fiddler 99

    7.2 爬虫与Fiddler的关系 100

    7.3 Fiddler的基本原理与基本界面 100

    7.4 Fiddler捕获会话功能 102

    7.5 使用QuickExec命令行 104

    7.6 Fiddler断点功能 106

    7.7 Fiddler会话查找功能 111

    7.8 Fiddler的其他功能 111

    7.9 小结 113

    第8章 爬虫的浏览器伪装技术 114

    8.1 什么是浏览器伪装技术 114

    8.2 浏览器伪装技术准备工作 115

    8.3 爬虫的浏览器伪装技术实战 117

    8.4 小结 121

    第9章 爬虫的定向爬取技术 122

    9.1 什么是爬虫的定向爬取技术 122

    9.2 定向爬取的相关步骤与策略 123

    9.3 定向爬取实战 124

    9.4 小结 130

    第三篇 框架实现篇

    第10章 了解Python爬虫框架 133

    10.1 什么是Python爬虫框架 133

    10.2 常见的Python爬虫框架 133

    10.3 认识Scrapy框架 134

    10.4 认识Crawley框架 135

    10.5 认识Portia框架 136

    10.6 认识newspaper框架 138

    10.7 认识Python-goose框架 139

    10.8 小结 140

    第11章 爬虫利器——Scrapy安装与配置 141

    11.1 在Windows7下安装及配置Scrapy实战详解 141

    11.2 在Linux(Centos)下安装及配置Scrapy实战详解 147

    11.3 在MAC下安装及配置Scrapy实战详解 158

    11.4 小结 161

    第12章 开启Scrapy爬虫项目之旅 162

    12.1 认识Scrapy项目的目录结构 162

    12.2 用Scrapy进行爬虫项目管理 163

    12.3 常用工具命令 166

    12.4 实战:Items的编写 181

    12.5 实战:Spider的编写 183

    12.6 XPath基础 187

    12.7 Spider类参数传递 188

    12.8 用XMLFeedSpider来分析XML源 191

    12.9 学会使用CSVFeedSpider 197

    12.10 Scrapy爬虫多开技能 200

    12.11 避免被禁止 206

    12.12 小结 212

    第13章 Scrapy核心架构 214

    13.1 初识Scrapy架构 214

    13.2 常用的Scrapy组件详解 215

    13.3 Scrapy工作流 217

    13.4 小结 219

    第14章 Scrapy中文输出与存储 220

    14.1 Scrapy的中文输出 220

    14.2 Scrapy的中文存储 223

    14.3 输出中文到JSON文件 225

    14.4 小结 230

    第15章 编写自动爬取网页的爬虫 231

    15.1 实战:items的编写 231

    15.2 实战:pipelines的编写 233

    15.3 实战:settings的编写 234

    15.4 自动爬虫编写实战 234

    15.5 调试与运行 239

    15.6 小结 242

    第16章 CrawlSpider 243

    16.1 初识CrawlSpider 243

    16.2 链接提取器 244

    16.3 实战:CrawlSpider实例 245

    16.4 小结 249

    第17章 Scrapy高级应用 250

    17.1 如何在Python3中操作数据库 250

    17.2 爬取内容写进MySQL 254

    17.3 小结 259

    第四篇 项目实战篇

    第18章 博客类爬虫项目 263

    18.1 博客类爬虫项目功能分析 263

    18.2 博客类爬虫项目实现思路 264

    18.3 博客类爬虫项目编写实战 264

    18.4 调试与运行 274

    18.5 小结 275

    第19章 图片类爬虫项目 276

    19.1 图片类爬虫项目功能分析 276

    19.2 图片类爬虫项目实现思路 277

    19.3 图片类爬虫项目编写实战 277

    19.4 调试与运行 281

    19.5 小结 282

    第20章 模拟登录爬虫项目 283

    20.1 模拟登录爬虫项目功能分析 283

    20.2 模拟登录爬虫项目实现思路 283

    20.3 模拟登录爬虫项目编写实战 284

    20.4 调试与运行 292

    20.5 小结 294

    展开全文
  • Python案例实操1-网络爬虫

    千次阅读 2022-01-31 20:42:36
    案例1:使用Python爬虫、sqlite技术爬取豆瓣电影Top250的电影数据,并保存成Excel文件和数据库文件 新建.py文件,定义程序运行的入口 if __name__ == "__main__": pass 分析爬取的网址信息 豆瓣电影TOP250 ...

    Python案例实操1-网络爬虫


    案例1:使用Python爬虫、sqlite技术爬取x半电影Top250的电影数据,并保存成Excel文件和数据库文件

    1. 新建.py文件,定义程序运行的入口
    if __name__ == "__main__":
    	pass
    
    1. 分析爬取的网址信息
      x半电影TOP250,分析网址的规律,点击下一页可以发现每次点击都会在网址后面拼接上start参数,参数表示上一页结束新一页开始

    2. 开始爬取网页, 爬取网页过程就是解析数据的过程,里面会使用到urllib.request模块获取网页数据、BeautifulSoup模块解析数据、re正则表达式模块匹配查找数据等

    def getData(baseurl):
        """爬取网页"""
        datalist = []
        for i in range(0, 10):  # 遍历页数
            url = baseurl + str(i * 25)  # 拼接URL,指定开始位置
            html = askUrl(url)
            # 解析网页数据
            soup = BeautifulSoup(html, "html.parser")
            for item in soup.find_all("div", class_="item"):  # 遍历指定查找结果列表
                data = []  # 保存电影信息
                item = str(item)  # 将item转成字符串
                link = re.findall(patlink, item)[0]  # 查找电影详情链接
                data.append(link)
                imgstr = re.findall(patimg, item)[0]  # 电影图片
                data.append(imgstr)
                titles = re.findall(pattitle, item)  # 电影名称,有多个名字
                if len(titles) == 2:
                    data.append(titles[0])  # 中文名
                    data.append(titles[1].replace("/", ""))  # 外文名, 去掉多余/
                else:
                    data.append(titles[0])
                    data.append("")  # 外文名留空
                score = re.findall(patscore, item)[0]  # 评分
                data.append(score)
                num = re.findall(patpeople, item)[0]  # 评价人数
                data.append(num)
                desc = re.findall(patdesc, item)  # 一句话描述
                if len(desc) != 0:
                    data.append(desc[0])
                else:
                    data.append("")
                bd = re.findall(patbd, item)[0]  # 背景信息
                bd = re.sub("<br(\s+)?/>(\s+)?", "", bd.strip())  # 去除<br/>标签, strip()去空格
                data.append(bd)
                datalist.append(data)
        return datalist
    
    
    1. 通过request请求数据时,经常会遇到反爬虫的网站,会报状态码418错误,需要我们手动设置headers来模拟正常用户请求,跳过反爬虫的拦截
    def askUrl(baseurl):
        """获取指定URL网页数据"""
        # 设置headers来模拟正常用户请求
        header = {
            "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 97.0.4692.99 Safari / 537.36 Edg / 97.0.1072.69"
        }
        req = urllib.request.Request(baseurl, headers=header)
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
        return html
    
    1. 解析得到我们所需要的数据后,使用sqlite模块保存到数据库文件中,方便后续对数据的处理(如词云生成,后面会有案例)

      连接数据库,并建立movie表

    def init_db(dbpath):
        """初始化数据库"""
        conn = sqlite3.connect(dbpath)
        # 获取游标
        c = conn.cursor()
        # 建表sql语句
        sql1 = "drop table if exists movie;"
        sql2 = '''
                create table movie(
                    link_detail varchar not null, 
                    link_img varchar, 
                    c_title varchar not null, 
                    o_title varchar,
                    score number, 
                    num int, 
                    desc varchar, 
                    bd text
                )
            '''
        c.execute(sql1)
        c.execute(sql2)
        conn.commit()
        conn.close()
    
    1. 将数据保存到数据库中
    def insert(datalist, dbpath):
        """数据库新增操作"""
        conn = sqlite3.connect(dbpath)
        c = conn.cursor()
        print("%d 条数据待写入数据库" % len(datalist))
        for move in datalist:
            for index in range(0, len(move)):
                if index == 4 or index == 5:
                    continue
                move[index] = '"' + move[index].strip() + '"'  # 给value加上双引号, 数字类型不用加
            sql = '''
                    insert into movie(link_detail, link_img, c_title, o_title, score, num, desc, bd)
                    values(%s)
            ''' % ','.join(move)  # value之间用,连接
            c.execute(sql)
            conn.commit()
        c.close()
        conn.close()
    
    1. 运行程序,生成movie.db数据库文件,大功告成!
    2. 附上程序完整代码 spider.py
    import urllib.request
    from bs4 import BeautifulSoup
    import re
    import xlwt
    import sqlite3
    
    # 匹配规则
    # 电影详情
    patlink = re.compile(r'a href="(.*?)">')
    # 电影图片
    patimg = re.compile(r'<img.*src="(.*?)"', re.S)  # re.S:让换行符也包含在字符串中
    # 电影名称
    pattitle = re.compile(r'<span class="title">(.*?)</span>')
    # 电影评分
    patscore = re.compile(r'<span class="rating_num" property="v:average">(.*?)</span>')
    # 影评人数
    patpeople = re.compile(r'<span>(\d*)人评价</span>')
    # 电影概况
    patdesc = re.compile(r'<span class="inq">(.*?)</span>')
    # 电影背景
    patbd = re.compile(r'<p class="">(.*?)</p>', re.S)
    
    
    def getData(baseurl):
        """爬取网页"""
        datalist = []
        for i in range(0, 10):  # 遍历页数
            url = baseurl + str(i * 25)  # 拼接URL,指定开始位置
            html = askUrl(url)
            # 解析网页数据
            soup = BeautifulSoup(html, "html.parser")
            for item in soup.find_all("div", class_="item"):  # 遍历指定查找结果列表
                data = []  # 保存电影信息
                item = str(item)  # 将item转成字符串
                link = re.findall(patlink, item)[0]  # 查找电影详情链接
                data.append(link)
                imgstr = re.findall(patimg, item)[0]  # 电影图片
                data.append(imgstr)
                titles = re.findall(pattitle, item)  # 电影名称,有多个名字
                if len(titles) == 2:
                    data.append(titles[0])  # 中文名
                    data.append(titles[1].replace("/", ""))  # 外文名, 去掉多余/
                else:
                    data.append(titles[0])
                    data.append("")  # 外文名留空
                score = re.findall(patscore, item)[0]  # 评分
                data.append(score)
                num = re.findall(patpeople, item)[0]  # 评价人数
                data.append(num)
                desc = re.findall(patdesc, item)  # 一句话描述
                if len(desc) != 0:
                    data.append(desc[0])
                else:
                    data.append("")
                bd = re.findall(patbd, item)[0]  # 背景信息
                bd = re.sub("<br(\s+)?/>(\s+)?", "", bd.strip())  # 去除<br/>标签, strip()去空格
                data.append(bd)
                datalist.append(data)
        return datalist
    
    
    def askUrl(baseurl):
        """获取指定URL网页数据"""
        # 设置headers来模拟正常用户请求
        header = {
            "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 97.0.4692.99 Safari / 537.36 Edg / 97.0.1072.69"
        }
        req = urllib.request.Request(baseurl, headers=header)
        response = urllib.request.urlopen(req)
        html = response.read().decode("utf-8")
        return html
    
    
    def saveData(datalist, filepath):
        """保存数据到Excel文件中"""
        workbook = xlwt.Workbook(encoding="utf-8")  # 创建Workbook对象
        sheet = workbook.add_sheet("豆瓣电影TOP250", cell_overwrite_ok=True)  # 创建工作页
        col = ("详情链接", "图片链接", "影片中文名", "影片外文名", "影片评分", "评分人数", "影片概述", "相关信息")  # 标题
        for i in range(0, len(col)):
            sheet.write(0, i, col[i])  # 写入标题 参数:“行”, “列”, “内容”
        for i in range(0, 250):
            move = datalist[i]  # 遍历影片信息 "行"
            for j in range(0, len(col)):  # "列"
                sheet.write(i + 1, j, move[j])  # 注意:从第二行开始写入影片信息
        workbook.save(filepath)  # 保存到文件
    
    
    def init_db(dbpath):
        """初始化数据库"""
        conn = sqlite3.connect(dbpath)
        # 获取游标
        c = conn.cursor()
        # 建表sql语句
        sql1 = "drop table if exists movie;"
        sql2 = '''
                create table movie(
                    link_detail varchar not null, 
                    link_img varchar, 
                    c_title varchar not null, 
                    o_title varchar,
                    score number, 
                    num int, 
                    desc varchar, 
                    bd text
                )
            '''
        c.execute(sql1)
        c.execute(sql2)
        conn.commit()
        conn.close()
    
    
    def insert(datalist, dbpath):
        """数据库新增操作"""
        conn = sqlite3.connect(dbpath)
        c = conn.cursor()
        print("%d 条数据待写入数据库" % len(datalist))
        for move in datalist:
            for index in range(0, len(move)):
                if index == 4 or index == 5:
                    continue
                move[index] = '"' + move[index].strip() + '"'  # 给value加上双引号, 数字类型不用加
            sql = '''
                    insert into movie(link_detail, link_img, c_title, o_title, score, num, desc, bd)
                    values(%s)
            ''' % ','.join(move)  # value之间用,连接
            c.execute(sql)
            conn.commit()
        c.close()
        conn.close()
    
    
    def saveToSqlite(datalist, dbpath):
        """保存数据到Sqlite文件中"""
        # 初始化数据库连接
        init_db(dbpath)
    
        # 将数据插入表中
        insert(datalist, dbpath)
    
    
    if __name__ == "__main__":
        baseurl = "https://movie.douban.com/top250?start=";
        # 1.爬取网页
        datalist = getData(baseurl)
        # 2.保存数据到Excel中
        # filepath = "豆瓣电影TOP250.xls"
        # saveData(datalist, filepath)
        # 3.保存数据到sqlite
        dbpath = "movie.db"
        saveToSqlite(datalist, dbpath)
        print("爬取成功!")
    
    
    展开全文
  • python爬虫20个案例

    2018-03-25 07:34:21
    讲诉python爬虫的20个案例 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 资料目录:前言第1章 Python零基础语法入门 11.1 Python与PyCharm安装 11.1.1 Python安装(Windows、Mac和Linux) 11.1.2 PyCharm安装 31.2 变量和字符串 31.2.1 变量 41.2.2 字符串的“加法”和“乘法” 41.2.3 ...
  • Python网络爬虫技术案例教程》PPT课件(共10单元)七单元爬取APP和PC客户端数据.pdf《Python网络爬虫技术案例教程》PPT课件(共10单元)七单元爬取APP和PC客户端数据.pdf《Python网络爬虫技术案例教程》PPT课件(共10...
  • │ 课时06:Python爬虫常用库的安装.mp4 │ ├─章节2: 基础篇 │ 课时07:爬虫基本原理讲解.mp4 │ 课时08:Urllib库基本使用.mp4 │ 课时09:Requests库基本使用.mp4 │ 课时10:正则表达式基础.mp4 │ 课时11:...
  • 视频讲解Python网络爬虫实战案例,总共分为5章:基础+实战+框架+分布式
  • python网络爬虫五个小实例

    万次阅读 多人点赞 2018-07-19 18:22:05
    keyword="Python" try: kv={'wd':keyword} r=requests.get("http://www.baidu.com/s",params=kv) print(r.request.url) r.raise_for_status() print(len(r,text)) except: print("爬取失败") 实例四 ...
  • 此包中为python爬虫的基本使用情况,包括案例代码,爬虫的入门操作
  • Python爬虫实战案例源码-批量爬取今日头条街拍美图
  • 主要介绍了Python 正则表达式爬虫使用案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • Python网络爬虫案例:百度地图API 使用百度API获取数据的实践案例,涉及的技术包括: 爬取网页:使用Requests请求百度地图API地址 解析网页:提取json数据 存储数据:存储至MySQL数据库 1.项目描述 通过百度...
  • python爬虫三个经典案例与selenium的使用文档
  • 给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python、网络爬虫方面的内容,本书是由机械工业出版社出版,格式为PDF,资源大小143.9 MB,罗攀编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为...
  • 使用python爬取一些在线文档
  • python网络爬虫教程

    2017-12-05 11:27:17
    python网络爬虫教程!里面有各种爬虫代码以及对于爬虫的详细介绍。并且还有一些关于python的基础内容。对于掌握python具有比较好的作用。里面代码案例非常丰富。
  • python爬虫入门案例,持续更新

    千次阅读 多人点赞 2021-10-21 23:03:37
    十一个python入门爬虫小案例前言爬虫案例聊天没有表情包被嘲讽,程序员直接用python爬取了十万张表情包python爬b站视频 人生苦短 我用pythonPython爬取美女图片 爬虫基础python爬取网易云评论 超简单教程python爬...
  • 网络爬虫程序的本质和要点 • 使用程序模拟和自动化人类的操作过程 • 网络爬虫并不局限于在网页上采集文本信息和下载文件,还包括电子 邮箱、FTP或类似的源 • 一定要先准确分析网页源代码结构,...
  • 最新版的python爬虫知识,其中还介绍了Android开发的基础知识。 目录: 网络协议&爬虫简介;爬虫请求模块;正则表达式;xpath;Beautiful Soup库;selenium;多线程;Scrapy框架;CrawSpider使用和settings文件讲解...
  • 课程为我们讲解了非常有参考意义和商业价值的Python案例实战案例,能够提供给我们一个非常清晰和高纬度的Python爬虫思路,包括帮助我们进行工程项目指导,如何完成Pyhon工业化爬虫框架,以及Pyhon商业爬虫的上线部署...
  • python爬虫案例

    千次阅读 2022-02-19 15:36:51
    案例1:爬取搜狗指定词条对应的搜索结果(简易网页采集器) 案例2:破解百度翻译 案例3:爬取豆瓣电影分类排行榜 https://movie.douban.com/中的电影详情数据 案例4:爬取肯德基餐厅查询 ...
  • 前几天小伙伴在写报告时,和我讨论了一下爬取某生态网站的统计数据问题,我看了一下,这个网站是动态加载的,想了一想,很多数据网站的数据都是动态加载的,那么脆写一个案例吧,方便大家进行数据收集和整理。...
  • python爬虫100例教程+源代码【基础案例python爬虫100例源代码、python基础案例100 Python基础案例 入门级别
  • python爬虫小实例

    2020-12-21 17:13:15
    Python爬虫入门小程序 博主作为一个刚入门Python爬虫的新人,研究了一阵后,为了检验自己所以写了一个Python爬虫小程序,目的是为了爬取某网站的绅士图片并下载保存到本地。 思路 先打开目标网站的网址,先对其进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,835
精华内容 13,534
关键字:

python网络爬虫案例