图书目录

                                                          

      

      

      

      

      

      

                                       第一篇  基 础 知 识 

第  1 章  开发环境配置.3 

                6分钟 

    1.1   搭建 Python 编程环境3 

         1.1.1   获取 Python 安装包 3 

         1.1.2   安装 Windows 版的  Python 开发包  .4 

         1.1.3   安装 macOS 版的  Python 开发包.4 

         1.1.4   安装 Linux 版的 Python 开发包.5 

    1.2   安装 Anaconda Python 开发环境   .5 

    1.3   消除 Python REPL 中的错误和警告       .6 

    1.4   安装 PyCharm7 

    1.5   配置 PyCharm8 

    1.6   小结 .9 

第  2 章  爬虫基础.10 

                10 分钟 

    2.1   HTTP 基础  10 

         2.1.1   URI 和 URL.10 

         2.1.2   超文本 .11 

         2.1.3   HTTP 与 HTTPS11 

         2.1.4   HTTP 的请求过程    13 

         2.1.5   请求 .16 

         2.1.6   响应 .19 

    2.2   网页基础   .22 

         2.2.1   HTML 基础22 

         2.2.2   CSS 基础23 

         2.2.3   CSS 选择器23 

         2.2.4   JavaScript.25 

    2.3   爬虫的基本原理.25 

         2.3.1   爬虫的分类   .26 

         2.3.2   爬虫抓取数据的方式和手段.26 

    2.4   Session 与 Cookie 27 

     6        Python 爬虫从菜鸟到高手 

               2.4.1   静态页面和动态页面.27 

               2.4.2   无状态 HTTP 与  Cookie .28 

               2.4.3   利用 Session 和 Cookie 保持状态  28 

               2.4.4   查看网站的   Cookie .29 

               2.4.5   HTTP 状态何时会失效      30 

          2.5   项目实战:抓取所有的网络资源              31 

                     实例  2.1   基于递归算法的爬虫的代码.34 

          2.6   项目实战:抓取博客文章列表.35 

                     实例  2.2   抓取博客园首页文章列表的爬虫              36 

          2.7   小结 .38 

                                              第二篇   网   络   库 

      第  3 章  网络库      urllib .41 

                      39 分钟 

          3.1   urllib 简介 .41 

          3.2   发送请求与获得响应.42 

               3.2.1   用 urlopen 函数发送 HTTP GET 请求.42 

                     实例  3.1   使用 HTTPResponse 读取响应数据42 

               3.2.2   用 urlopen 函数发送 HTTP POST 请求.43 

                     实例  3.2   使用 urlopen 函数发送   HTTP POST 请求,并获得返回数据            43 

               3.2.3   请求超时  .44 

                     实例  3.3   捕捉 urlopen 函数的超时异常.45 

               3.2.4   设置 HTTP 请求头   .45 

                     实例  3.4   修改和提交    HTTP 请求头    .45 

               3.2.5   设置中文  HTTP 请求头    .47 

                     实例  3.5   设置和解码中文      HTTP 请求头.48 

               3.2.6   请求基础验证页面.49 

                     实例  3.6   请求基础验证页面.50 

               3.2.7   搭建代理与使用代理.53 

                     实例  3.7   通过代理访问     Web 页面   .55 

               3.2.8   读取和设置   Cookie .55 

                     实例3.8  读取Cookie.56 

                     实例  3.9   将 Cookie 保存为  Mozille 格式和  LWP 格式57 

                     实例  3.10   装载和发送    Cookie.58 

          3.3   异常处理   .59 

               3.3.1   URLError .59 

                     实例  3.11   捕捉发送请求抛出的异常.59 

               3.3.2   HTTPError .60 

                                                                                                                  目录          7 

               实例  3.12   使用 HTTPError 类和  URLError 类捕捉异常.60 

    3.4   解析链接   .61 

         3.4.1   拆分与合并   URL 方法一(urlparse 与    urlunparse) .61 

               实例  3.13   使用 urlparse 函数和  urlunparse 函数拆分与合并      URL62 

         3.4.2   拆分与合并   URL 方法二(urlsplit 与   urlunsplit) 63 

               实例  3.14   使用 urlsplit 函数和 urlunsplit 函数拆分与合并     URL.63 

         3.4.3   连接 URL(urljoin)64 

               实例  3.15   使用 urljoin 函数连接   URL64 

         3.4.4   URL 编码(urlencode).65 

               实例  3.16   使用 urlencode 函数编码包含中文的        URL  65 

         3.4.5   编码与解码(quote 与    unquote) .65 

               实例  3.17   使用 quote 函数和   unquote 对 URL 中的参数编码和解码 .65 

         3.4.6   参数转换(parse_qs 与   parse_qsl)65 

               实例  3.18   拆分由多个参数组成的字符串             66 

    3.5   Robots 协议 .66 

         3.5.1   Robots 协议简介 .66 

         3.5.2   分析 Robots 协议 68 

               实例  3.19   用 robots.txt 约束爬虫 68 

    3.6   小结 .69 

第  4 章  网络库      urllib3.70 

                10 分钟 

    4.1   urllib3 简介 .70 

    4.2   urllib3 模块 .70 

    4.3  发送HTTPGET请求       .71 

               实例  4.1   获取百度的搜索结果.71 

    4.4  发送HTTPPOST请求       .72 

               实例  4.2   发送 HTTP POST 请求,并接收返回结果.72 

    4.5   HTTP 请求头   73 

               实例  4.3   搜索天猫商城中的数据.74 

    4.6   HTTP 响应头   76 

               实例  4.4   获取并输出    HTTP 响应头信息.76 

    4.7  上传文件    .76 

               实例  4.5   将任意文件上传到服务端.77 

    4.8  超时  .78 

               实例  4.6   连接超时和读取超时.78 

    4.9  小结  .79 

第  5 章  网络库      requests 80 

                17 分钟 

    5.1   基本用法   .80 

     8        Python 爬虫从菜鸟到高手 

               5.1.1   requests 的 HelloWorld .80 

                     实例  5.1   发送 HTTP GET 请求,并获取响应的返回信息               80 

               5.1.2   HTTP GET 请求 81 

                     实例5.2  设置HTTP GET请求参数.81 

               5.1.3   添加 HTTP 请求头   .82 

                     实例  5.3   设置 HTTP 请求头    .82 

               5.1.4   抓取二进制数据.83 

                     实例  5.4   抓取并保存图像.83 

               5.1.5   HTTP POST 请求 84 

                     实例  5.5   发送 HTTP POST 请求,并获取响应数据.84 

               5.1.6   响应数据  .84 

                     实例  5.6   向简书发送    HTTP GET 请求,并输出响应结果            85 

          5.2   高级用法   .85 

               5.2.1   上传文件  .86 

                     实例  5.7   上传本地图像.86 

               5.2.2   处理 Cookie .87 

                     实例  5.8   获取和发送    Cookie.87 

               5.2.3   使用同一个会话(Session).88 

                     实例  5.9   Session 与 Cookie 密切配合维护会话.88 

               5.2.4   SSL 证书验证89 

                     实例  5.10   捕捉证书验证异常.89 

               5.2.5   使用代理  .92 

                     实例  5.11   通过代理访问天猫首页,并输出响应内容                  92 

               5.2.6   超时 .92 

                     实例  5.12   连接超时和读取超时.93 

               5.2.7  身份验证   .93 

                     实例5.13  发送Basic 验证请求        94 

               5.2.8   将请求打包   .94 

                     实例  5.14  封装和发送请求.94 

          5.3   小结 .95 

                                              第三篇   解   析   库 

      第  6 章  正则表达式.99 

                      35 分钟 

          6.1   使用正则表达式.99 

               6.1.1   使用 match 方法匹配字符串      .99 

                     实例  6.1   利用 match 方法与   group 方法实现模式匹配99 

               6.1.2   使用 search 方法在一个字符串中查找模式           100 

                                                                                                                  目录          9 

               实例  6.2   使用 match 方法与   search 方法进行匹配和搜索         100 

         6.1.3  匹配多个字符串.101 

               实例6.3  择一匹配符与匹配和搜索.101 

         6.1.4  匹配任何单个字符.102 

               实例  6.4  点符号的匹配与替换.102 

         6.1.5   使用字符集   .103 

               实例6.5  字符集和择一匹配符的用法和差别                 104 

         6.1.6  重复、可选和特殊字符.105 

               实例  6.6  各种匹配符号的用法.106 

         6.1.7   分组 .108 

               实例  6.7  在正则表达式中使用分组.108 

         6.1.8  匹配字符串的起始和结尾及单词边界               109 

               实例  6.8  匹配字符串的起始和结束位置及单词的边界                   110 

         6.1.9   使用 findall 函数和 finditer 函数查找每一次出现的位置         111 

               实例6.9  使用findall 函数和     finditer 函数搜索字符串.111 

         6.1.10   用 sub 函数和 subn 函数搜索与替换       .113 

               实例  6.10   使用 sub 函数和   subn 函数搜索和替换字符串          .113 

         6.1.11   使用 split 函数分隔字符串114 

               实例  6.11   使用 split 函数分隔字符串114 

    6.2   一些常用的正则表达式.115 

               实例  6.12   使用 Email、IP 地址和Web地址的正则表达式115 

    6.3   项目实战:抓取小说目录和全文             116 

               实例6.13  抓取小说目录爬虫的完整实现               118 

    6.4   小结 .120 

第  7 章  lxml  与  XPath 121 

                28 分钟 

    7.1   lxml 基础 .121 

         7.1.1   安装 lxml .121 

         7.1.2  操作 XML 122 

               实例7.1  使用lxml获取XML  的节点文本和属性值                122 

         7.1.3  操作 HTML124 

               实例7.2  使用lxml获取HTML文档的节点文本和属性值.124 

    7.2  XPath .125 

         7.2.1  XPath 概述 125 

         7.2.2   使用 XPath 125 

               实例7.3  利用lxml和XPath 提取        HTML 文件中的信息       .125 

         7.2.3   选取所有节点.127 

               实例7.4  使用    XPath 选取  HTML 文件中的节点       127 

         7.2.4   选取子节点   .128 

     10        Python 爬虫从菜鸟到高手 

                      实例7.5  使用XPath     根据规则选取<a>节点.129 

                7.2.5   选取父节点   .129 

                      实例7.6  使用XPath 选取<a>节点和父节点,并输出                 class 属性值 130 

                7.2.6  属性匹配与获取.130 

                      实例  7.7  根据href属性过滤<a>节点        130 

                7.2.7   多属性匹配   .131 

                      实例7.8  使用and和or选取<a>节点131 

                7.2.8  按序选择节点.132 

                      实例7.9  使用XPath 和索引获取特定<a>节点             132 

                7.2.9  节点轴选择    .133 

                      实例7.10  使用XPath 和节点轴选择方法获取特定的节点                   133 

                7.2.10  在 Chrome 中自动获得    XPath 代码.135 

                      实例  7.11   利用 requests 库抓取京东商城导航条文本           .135 

                7.2.11   使用 Chrome 验证 XPath137 

           7.3   项目实战:抓取豆瓣        Top250 图书榜单    138 

                      实例7.12  抓取豆瓣      Top250 图书榜单爬虫完整实现          141 

           7.4   项目实战:抓取起点中文网的小说信息                142 

                      实例7.13  抓取起点中文网小说信息爬虫完整实现                   144 

           7.5   小结 .146 

       第  8 章  Beautiful Soup   库. 147 

                       24 分钟 

           8.1  Beautiful Soup 简介.147 

           8.2  Beautiful Soup 基础.147 

                8.2.1   安装 Beautiful Soup.147 

                8.2.2   选择解析器   .148 

                8.2.3   编写第一个   Beautiful Soup 程序149 

                      实例8.1  使用Beautiful Soup 分析    HTML 代码.149 

           8.3  节点选择器.150 

                8.3.1   选择节点  .150 

                      实例8.2  使用Beautiful Soup  节点选择器获取特定节点的信息.151 

                8.3.2  嵌套选择节点.152 

                      实例  8.3  嵌套选择    HTML 文档中的节点       152 

                8.3.3   选择子节点   .153 

                      实例8.4  选取子节点和子孙节点.154 

                8.3.4   选择父节点   .156 

                      实例8.5  获取a节点的父节点.156 

                8.3.5   选择兄弟节点.157 

                      实例8.6  获取li节点的同级节点           158 

           8.4   方法选择器.159 

                                                                                                                   目录         11

         8.4.1  find_all 方法159 

               实例8.7  使用find_all 方法搜索      ul 节点和li节点.160 

               实例  8.8  根据属性值定位节点.161 

               实例8.9  通过节点内容定位文本节点.162 

         8.4.2  find 方法163 

               实例8.10  搜索特定条件的节点.163 

    8.5   CSS 选择器164 

         8.5.1   基本用法  .164 

               实例  8.11   使用 CSS 选择器查询特定的节点164 

         8.5.2  嵌套选择节点.165 

               实例  8.12  混合使用    CSS 选择器和方法选择器搜索特定节点165 

         8.5.3   获取属性值与文本.167 

               实例  8.13   使用 CSS 选择器选取特定的a节点           167 

         8.5.4   通过浏览器获取     CSS 选择器代码     168 

               实例  8.14   使用 CSS 选择器获取京东上传导航条的链接文本168 

    8.6   实战案例:抓取酷狗网络红歌榜             170 

               实例8.15  抓取酷狗网络红歌榜爬虫完整实现                 171 

    8.7   小结 .172 

第  9 章  pyquery   库   173 

                24 分钟 

    9.1   pyquery 简介 .173 

    9.2   pyquery 基础 .173 

         9.2.1   安装 pyquery .173 

         9.2.2   pyquery 的基本用法  .174 

               实例9.1  通过3种方式为         PyQuery 对象传入    HTML 文档   174 

    9.3   CSS 选择器175 

               实例  9.2   使用 pyquery 和 CSS 选择器分析和提取        HTML 代码中的信息       175 

    9.4   查找节点   .177 

         9.4.1   查找子节点   .177 

               实例9.3  使用find 方法和      children 方法查找子节点.177 

         9.4.2   查找父节点   .178 

               实例  9.4   使用 parent 方法和  parents 方法获取父节点.178 

         9.4.3   查找兄弟节点.179 

               实例  9.5   使用 siblings 方法查找兄弟节点      179 

         9.4.4   获取节点信息.180 

               实例9.6  获取节点的各种信息.182 

    9.5   修改节点   .184 

         9.5.1   添加和移除节点的样式(addClass 和         removeClass) 184 

               实例9.7  修改节点的样式.185 

     12        Python 爬虫从菜鸟到高手 

                9.5.2   修改节点属性和内容(attr、removeAttr、text 和       html).186 

                      实例9.8  attr方法、removeAttr 方法、text 方法和       html 方法的用法演示       .187 

                9.5.3  删除节点(remove)188 

                      实例  9.9   使用 remove 方法删除节点      .189 

           9.6  伪类选择器.190 

                      实例  9.10  伪类选择器用法展示.190 

           9.7   项目实战:抓取当当图书排行榜             191 

                      实例9.11  分析当当图书搜索页面.194 

           9.8   项目实战:抓取京东商城手机销售排行榜                  196 

                      实例9.12  分析京东商城搜索页面,并将结果保存到                     Excel 文档中.197 

           9.9   小结 .201 

                                              第四篇  数 据 存 储 

       第  10 章  文件存储       . 205 

                       38 分钟 

           10.1  打开文件.205 

           10.2  操作文件的基本方法.206 

                 10.2.1   读文件和写文件.207 

                      实例10.1  使用不同模式操作文件.207 

                 10.2.2   读行和写行.208 

                      实例  10.2  按行读写文本文件.209 

           10.3   使用 FileInput 对象读取文件210 

                      实例10.3  获取文件内容和相关属性.210 

           10.4   处理 XML 格式的数据.211 

                 10.4.1   读取与搜索   XML 文件.211 

                      实例10.4  获取    XML 文件的节点和属性信息           211 

                 10.4.2   字典转换为   XML 字符串.212 

                      实例10.5  将字典对象转换为格式化的               XML 文件  213 

                 10.4.3  XML 字符串转换为字典214 

                      实例10.6  将XML 文件转换为字典对象.214 

           10.5   处理 JSON 格式的数据215 

                 10.5.1   JSON 字符串与字典互相转换.216 

                      实例10.7  字典与JSON      字符串互相转换216 

                 10.5.2   将 JSON 字符串转换为类实例217 

                      实例  10.8   将 product.json 文件转换为  Product 对象.218 

                 10.5.3   将类实例转换为     JSON 字符串219 

                      实例10.9  将Product对象转换为         JSON 文件  .219 

                 10.5.4   类实例列表与    JSON 字符串互相转换219 

                                                                                                                   目录         13

               实例  10.10   将 Product 对象列表与    JSON 文件互相转换      .219 

    10.6   将 JSON 字符串转换为      XML 字符串220 

               实例  10.11   将 products.json 文件转换为  XML 文件   .220 

    10.7   CSV 文件存储.221 

          10.7.1  写入 CSV 文件221 

               实例  10.12   将数据写入    CSV 文件222 

          10.7.2   读取 CSV 文件223 

               实例10.13  读取CSV     文件中的数据224 

    10.8   小结 .224 

第  11 章  数据库存储        . 225 

                5分钟 

    11.1   SQLite 数据库 .225 

          11.1.1  管理SQLite 数据库225 

          11.1.2   用 Python 操作 SQLite 数据库.228 

               实例11.1  读写    SQLite 数据库中的数据228 

    11.2   项目实战:抓取豆瓣音乐排行榜             230 

               实例11.2  抓取豆瓣音乐        Top250 排行榜爬虫完整实现         232 

    11.3   项目实战:抓取豆瓣电影排行榜             235 

               实例11.3  抓取豆瓣电影        Top250 排行榜爬虫的完整实现          236 

    11.4   小结 .239 

                                      第五篇   爬虫高级应用 

第  12 章  抓取异步数据          . 243 

                11 分钟 

    12.1   异步加载与    AJAX 243 

    12.2   基本原理.243 

               实例12.1  使用jQuery 发送请求,并获取数据244 

    12.3  逆向工程.246 

    12.4   提取结果.249 

               实例12.2  使用requests访问异步请求的           URL.249 

    12.5   项目实战:支持搜索功能的图片爬虫               250 

               实例12.3  图片爬虫完整实现.253 

    12.6   项目实战:抓取京东图书评价.255 

               实例12.4  抓取京东图书评价爬虫完整实现                256 

    12.7   小结 .259 

第  13 章  可见即可“爬”:Selenium. 260 

                16 分钟 

    13.1   安装 Selenium .260 

     14        Python 爬虫从菜鸟到高手 

           13.2   安装 WebDriver.261 

                 13.2.1   安装 ChromeDriver261 

                 13.2.2   安装 Edge WebDriver262 

                 13.2.3   安装其他浏览器的      WebDriver 263 

           13.3   Selenium 的基本使用方法     .264 

                      实例  13.1   使用 Selenium 控制浏览器264 

           13.4   查找节点.267 

                 13.4.1   查找单个节点.267 

                      实例13.2  使用find_element 查找单个节点267 

                 13.4.2   查找多个节点.269 

                      实例13.3  使用find_elements 查找多个节点        269 

           13.5  节点交互.270 

                      实例13.4  模拟单击浏览器中的按钮.270 

           13.6   动作链  .271 

                      实例13.5  模拟鼠标移动动作,自动控制京东商城首页                     271 

                      实例13.6  模拟拖拽动作移动节点.273 

           13.7  执行  JavaScript 代码.274 

                      实例13.7  动态执行      JS 代码滚动京东商城首页.274 

           13.8   获取节点信息.275 

                      实例  13.8   使用 Selenium API 获取京东商城首页       HTML 中的信息275 

           13.9  管理  Cookies276 

                      实例  13.9   用 Selenium API 读写 Cookie.276 

           13.10   改变节点的属性值.277 

                      实例13.10  改变百度搜索按钮的位置.277 

                      实例13.11  修改京东商城首页的导航条菜单                278 

           13.11   项目实战:抓取      QQ 空间说说的内容.279 

                      实例13.12  抓取QQ 空间说说内容爬虫完整代码.279 

           13.12   小结 .281 

       第  14 章  基于     Splash 的爬虫    . 282 

           14.1   Splash 基础282 

                 14.1.1   Splash 功能简介282 

                 14.1.2   安装 Docker.282 

                 14.1.3   安装 Splash283 

           14.2   Splash Lua 脚本.285 

                 14.2.1  第一个  Lua 脚本.285 

                      实例14.1  获取京东商城首页的标题.285 

                 14.2.2   异步处理  .286 

                      实例14.2  异步访问多个        URL,并显示这些        URL 对应的截图286 

                 14.2.3   Splash 对象属性287 

                                                                                                                   目录         15

          14.2.4  go方法.290 

               实例  14.3   发送 POST 请求,并返回       HTML 代码和    Har 图表.291 

          14.2.5   wait 方法292 

          14.2.6   jsfunc 方法.292 

               实例  14.4  调用  JavaScript 函数获取节点信息      292 

          14.2.7   evaljs 方法.293 

          14.2.8   runjs 方法 293 

          14.2.9   autoload 方法.293 

               实例14.5  使用jQuery 获取      a 节点的总数    293 

          14.2.10   call_later 方法 .294 

               实例  14.6  延迟获取页面截图.294 

          14.2.11   http_get 方法 .296 

               实例  14.7   发送 HTTP GET 请求,并接收返回结果           296 

          14.2.12   http_post 方法 .296 

               实例  14.8   发送 HTTP POST 请求,并接收返回结果.297 

          14.2.13   set_content 方法 297 

          14.2.14   html 方法.298 

          14.2.15   png 方法 299 

          14.2.16   jpeg 方法 .299 

          14.2.17   har 方法.299 

          14.2.18  其他方法   .299 

    14.3   使用 CSS 选择器   303 

          14.3.1   select 方法.303 

               实例  14.9  在京东商城首页搜索框中输入关键字                303 

          14.3.2   select_all 方法.304 

               实例14.10  查找京东商城首页          HTML 代码中的      a 节点,并返回相关数据304 

    14.4   模拟鼠标键盘动作.305 

               实例14.11  模拟单击京东商城首页搜索按钮                305 

    14.5   Splash HTTP API.306 

               实例14.12  返回PNG 格式图像并保存.309 

    14.6   项目实战:使用      Splash Lua 抓取京东搜索结果.310 

               实例14.13  抓取京东搜索结果爬虫完整实现代码                  310 

    14.7   小结 .312 

第  15 章  抓取移动       App  的数据     313 

    15.1   使用 Charles 313 

          15.1.1   抓取 HTTP 数据包   .313 

          15.1.2   安装 PC 端证书   315 

          15.1.3  在手机端安装证书.316 

          15.1.4  监听 HTTPS 数据包    .317 

     16        Python 爬虫从菜鸟到高手 

           15.2   使用 mitmproxy .318 

                 15.2.1   安装 mitmproxy .318 

                 15.2.2  在 PC 端安装   mitmproxy 证书 .319 

                 15.2.3  在移动端安装     mitmproxy 证书321 

                 15.2.4   mitmproxy 的主要功能  .322 

                 15.2.5   设置手机的代理.323 

                 15.2.6   用 mitmproxy 监听 App 的请求与响应数据       .324 

                 15.2.7   使用 mitmproxy 编辑请求信息325 

                 15.2.8   mitmdump 与 Python 对接 327 

                 15.2.9   使用 mitmweb 监听请求与响应       331 

           15.3   项目实战:实时抓取“得到”App             在线课程.332 

                      实例15.1  爬虫完整代码.334 

           15.4   使用 Appium 在移动端抓取数据337 

                 15.4.1   Appium 安装与配置   .337 

                 15.4.2   Appium 的基本使用方法     .340 

                 15.4.3   使用 Python 控制手机   App 344 

                      实例  15.2  控制微信App.344 

                 15.4.4   AppiumPythonClient API.345 

           15.5   小结 .348 

       第  16 章  多线程和多进程爬虫             . 349 

                       31 分钟 

           16.1  线程与进程.349 

                 16.1.1   进程 .349 

                 16.1.2  线程 .349 

           16.2  Python与线程   .350 

                 16.2.1   使用单线程执行程序.350 

                      实例  16.1  单线程调用函数演示.350 

                 16.2.2   使用多线程执行程序.351 

                      实例16.2  多线程调用函数演示.351 

                 16.2.3   为线程函数传递参数.352 

                      实例16.3  为线程函数传递参数.352 

                 16.2.4  线程和锁   .353 

                      实例  16.4  线程加锁与解锁.353 

           16.3   高级线程模块(threading)354 

                 16.3.1   Thread 类与线程函数.355 

                      实例  16.5   使用 Thread.join 方法等待所有线程执行完毕          355 

                 16.3.2   Thread 类与线程对象.356 

                      实例16.6  用Thread对象管理线程356 

                 16.3.3  从 Thread 类继承357 

                                                                                                                   目录         17

               实例  16.7   通过 Thread 的子类管理线程       .357 

    16.4  线程同步.359 

          16.4.1  线程锁  .360 

               实例16.8  使用线程锁让        for 循环变成原子操作       360 

          16.4.2   信号量 .361 

               实例  16.9  创建、获取和释放信号量.362 

               实例16.10  用信号量与线程锁模拟糖果机               363 

    16.5  生产者-消费者问题与         queue 模块.365 

               实例  16.11  生产者-消费者模拟器         365 

    16.6   多进程  .367 

               实例16.12  Pool对象与多进程.367 

    16.7   项目实战:抓取豆瓣音乐          Top250 排行榜(多线程版)368 

               实例16.13  多线程版抓取音乐          Top250 排行榜爬虫完整实现         369 

    16.8   项目实战:抓取豆瓣音乐          Top250 排行榜(多进程版)371 

               实例  16.14   多进程版抓取音乐       Top250 排行榜爬虫完整实现         371 

    16.9   小结 .373 

第  17 章  网络爬虫框架:Scrapy            基础 374 

                14 分钟 

    17.1   Scrapy 基础知识  .374 

          17.1.1   Scrapy 简介 .374 

          17.1.2   Scrapy 安装 .375 

          17.1.3   Scrapy Shell 抓取 Web 资源.375 

    17.2   用 Scrapy 编写网络爬虫    378 

          17.2.1  创建和使用    Scrapy 工程 378 

               实例  17.1   使用 Scrapy 创建第一个爬虫程序378 

          17.2.2  在 PyCharm 中使用   Scrapy.379 

          17.2.3  在 PyCharm 中使用扩展工具运行         Scrapy 程序 .381 

          17.2.4   使用 Scrapy 抓取数据,并通过       XPath 指定解析规则382 

               实例17.2  过滤博文列表.382 

          17.2.5   将抓取到的数据保存为多种格式的文件               383 

               实例  17.3   通过 Item 类保存抓取到的数据         .384 

          17.2.6   使用 ItemLoader 保存单条抓取的数据       385 

               实例  17.4   用 ItemLoader 对象和 XPath 获取并保存文章相关信息           386 

          17.2.7   使用 ItemLoader 保存多条抓取的数据       387 

               实例  17.5   保存博客页面中的所有博客数据             387 

          17.2.8   抓取多个  URL 389 

               实例  17.6   抓取多个博客页面的内容.389 

    17.3   小结 .390 

 

     18        Python 爬虫从菜鸟到高手 

       第  18 章  网络爬虫框架:Scrapy            高级技术 391 

           18.1   处理登录页面.391 

                      实例  18.1   Scrapy 模拟登录  .391 

           18.2   处理带隐藏文本框的登录页面.394 

                      实例  18.2  校验字符串.395 

           18.3   通过 API 抓取天气预报数据        396 

                      实例18.3  抓取天气预报数据.397 

           18.4  从 CSV 格式转换到      JSON 格式.402 

                      实例18.4  抓取京东商城图像信息,并保存这些信息                    403 

           18.5  下载器中间件.406 

                      实例18.5  模拟浏览器       HTTP 请求头的中间件.408 

           18.6   爬虫中间件.410 

                      实例  18.6   使用爬虫中间件设置        HTTP 请求头,并修改        HTTP 响应状态码.412 

           18.7  Item管道.413 

                      实例18.7  使用Item管道抓取美女图片             .414 

           18.8   通用爬虫.422 

                      实例18.8  抓取中华网的互联网类新闻内容                426 

           18.9   小结 .430 

       第  19 章  识别验证码        . 431 

                       13 分钟 

           19.1   使用 OCR  技术识别图形验证码.431 

                 19.1.1   OCR 技术 432 

                 19.1.2   使用 OCR 技术前的准备工作.432 

                 19.1.3  识别图像中的字符.433 

                      实例19.1  使用image_to_text 函数识别图像中的字符            433 

                 19.1.4  识别二值图像中的字符.433 

                      实例  19.2   使用 point 函数将彩色图像转换为二值图像,再识别其中的字符434 

                      实例19.3  利用NumPy 数组将真色彩图像转换为二值图像,并识别其中的字符435 

                 19.1.5  识别网站中的验证码.436 

                      实例  19.4   使用 selenium 和 OCR 自动登录网站      436 

           19.2   使用 OpenCV识别滑动验证码的移动距离.438 

                 19.2.1   实现原理  .438 

                 19.2.2   高斯滤波  .439 

                      实例  19.5   使用 GaussianBlur 函数对图像进行高斯滤波处理.439 

                 19.2.3   Canny 边缘检测440 

                      实例  19.6  检测并显示花朵的边缘.441 

                 19.2.4   提取轮廓  .442 

                 19.2.5  绘制轮廓   .442 

                      实例  19.7  绘制蜘蛛的轮廓.443 

                                                                                                                   目录         19

          19.2.6  轮廓面积与周长.444 

               实例  19.8  检测滑动验证码中滑动和缺口的轮廓                444 

    19.3   小结 .446 

第  20 章  综合爬虫项目:可视化爬虫                 . 447 

    20.1   项目简介.447 

    20.2  主界面设计和实现.448 

    20.3   获取商品页数和每页商品数.450 

    20.4   并发抓取商品列表.451 

    20.5   数据库操作类.453 

    20.6  情感分析.456 

    20.7   抓取和分析商品评论数据.456 

    20.8  可视化评论数据.458 

    20.9   小结 .460