精华内容
下载资源
问答
  • 本文实例讲述了Python实现可获取网易页面所有文本信息的网易网络爬虫功能。分享给大家供大家参考,具体如下: #coding=utf-8 #--------------------------------------- # 程序:网易爬虫 # 作者:ewang # 日期:...
  • 这是一份同学的爬虫的毕业论文,完整的。需要的赶紧拿走
  • 一个简单的网络爬虫,抓取当前页面的内容,以文本形式存放到本地。 没有什么难度,适合初学网络java的童鞋。
  • 【为什么学爬虫?】  1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可...爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫字体反爬识别等。Scrapy和分布式
  • 创建分页url2.1 网页url规律查找2.2 创建接口输出url测试3 正则表达式匹配3.1 直接匹配源代码3.2 配合网页解析进行结果匹配4. 小结5. 全部代码5.1 re + 源代码5.2 bs4 + re 1. 爬虫架构 为了减少不必要的步骤,直接...
  • python爬虫抓取哪儿网页上的一些字段,只能用炫酷来形容,感兴趣就下载看看吧
  • 目录 1、URI与URL 2、超文本hypertext ... 5、请求方法 6、请求头 7、请求体 8、响应 ...9、网页基础 1、URI与URL URI是统一资源标志符(URL是URI的子集,URI还包括一个子类为URN统一资源名...

    目录

    1、URI与URL      2、超文本hypertext

    3、HTTP和HTTPS         4、HTTP请求过程

    5、请求方法                    6、请求头

    7、请求体                        8、响应

    9、网页基础


     

    1、URI与URL

    URI是统一资源标志符(URL是URI的子集,URI还包括一个子类为URN统一资源名称,它只命名资源而不指定如何定位资源)

    URL统一资源定位符(如:https://baidu.com/wd=leebeloved是一个URL同样也是一个URI,拆解后为:访问协议https,访问路径baidu.com,资源名称wd=leebeloved)

    2、超文本hypertext,浏览器所展现的网页为超文本解析而来的,网页源码为HTML代码。

    3、HTTP和HTTPS

    HTTP称为超文本传输协议,是从网络传输超文本数据到本地浏览器的协议。而HTTPS为安全版的HTTP,在HTTP下加入ssl层,HTTPS传输内容都是经过ssl加密的。

    HTTPS作用分为:1、建立安全的信息通道;2、保证网站的真实性

    4、HTTP请求过程

        HTTP请求过程:从输入URL到网页呈现的过程是:浏览器→发送请求→网站所在服务器→网站处理、解析请求→返回相应的响应→传回浏览器(一个网站的请求在开发者工具中的参数:name请求名称,通常为URL最后一部分;status响应状态码;type请求的文档类型;initiator请求源,用来标记求情是由哪个对象或者进程发起的;size从服务器下载或者请求的资源大小;time请求发起到获取响应所用的时间;waterfall网络请求的可视化瀑布流)

         网页开发者工具栏:General部分,request url为请求URL,request method为请求方法,status source为响应状态码,remote address为远程服务器地址和端口,referrer policy为referrer判别策略,response headers为响应头,request headers为请求头(请求头中包含有浏览器标识、cookies、host等)

    5、请求方法

    客户端向服务端发送请求分为4部分:请求方法、网址、头、体。常用的请求方法是get和post。

        5.1、get请求中的参数包含在URL里面,数据可以在URL中看到,而POST请求的URL不会包含这些数据,数据都是通过表单形式传输的,会包含在请求体中(URL中看不到)。
        5.2、GET请求提交的数据最多只有1024字节,而POST方式没有限制。

    6、请求头包含的信息

    用于说明服务器要使用的附加信息,比较重要的信息有 Cookie、 Referrer、user-agent等。
        6.1、 Accept:请求报头域,用于指定客户端可接受哪些类型的信息;
        6.2、Accept-language:指定客户端可接受的言类型;
        6.3、Accept- Encoding:指定客户端可接受的内容编码;
        6.4、Host:用于指定请求资源的主机IP和端口号,其内容为请求URL的原始务器或网关的位置;
        6.5、Cookie:也常用复数形式 Cookies,网站为了辨别用户进行会话跟踪面存储在用户本地的数据。它的主每功能是维持当前访问会话。 Cookies里有信息标识了我们所对应的服务器
    的会话,每次测览器在请求该站点的页面时,都会在请求头中加上 Cookies并将其发送给服务器,服务器通过 Cookies识别出是我们自己,并且查出当前状态是登录状态。所以返同结果就是登录之后才能看到的网项内容。
        6.6、Referer:此内容用来标识这个请求是从哪个页面发过来的,服务器可以拿到这一信息并做相应的处理,如做来源统计、防盗链处理等。
        6.7、User- Agent:简称UA,它是一个特殊的字符事头,可以使服务器识别客户使用的操作系统及版本,浏览器及版本等信息。在做爬虫时加上此信息,可以伪装为览器;如果不加,很容易被识别出是爬虫。

    7、请求体:一般承载的内容是post请求中的表单数据,get请求的请求体为空

    8、响应:服务端返回到客户端,分为响应状态码、头、体

    响应状态码:200表示服务器正常响应,404表示页面未找到,500代表服务器内部发生错误,403服务器拒绝此访问请求,禁止访问。

    响应体:做爬虫时候主要通过响应体得到网页源码、json数据等。

    9、网页基础

    9.1 网页组成:

    html描述网页的语言,网页包括文字、图片、视频、按钮等。(不同类型文字通过不同类型标签表示,img图片、video视频、p段落、div布局标签,整个网页框架是各种标签不同的排列和嵌套的组合);

    JavaScript:脚本语言,html与css配合使用提供给用户的只是静态信息,缺乏交互性;

    css:层叠样式表,层叠指在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器可依据层叠顺序处理,样式指网页中文字大小、颜色、元素间距、排列等格式。

    9.2 节点树及节点间关系

    DOM文档对象模型,它定义了访问HTML和XML的标准。

    HTML DOM将HTML文档视为树结构:

    节点有层级关系,父节点、子节点、兄弟节点,节点树中顶端节点称为根,每个节点都有父节点,同时可以拥有任意数量子节点或者兄弟节点。

    9.3  css选择器,用来定位节点,可嵌套选择。

    展开全文
  • 本代码要求输入新闻或含有大量文字的页面url,从而自动识别正文并抓取正文,是去噪及爬虫的结合体,注意要将所有包导入
  • 本节中,我们就来了解一下网页的基本组成、结构和节点等内容。1. 网页的组成网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作一个人的话,HTML相当于骨架,JavaScript相当于肌肉,CSS相当于皮肤,三...

    用浏览器访问网站时,页面各不相同,你有没有想过它为何会呈现这个样子呢?本节中,我们就来了解一下网页的基本组成、结构和节点等内容。

    1. 网页的组成

    网页可以分为三大部分——HTML、CSS和JavaScript。如果把网页比作一个人的话,HTML相当于骨架,JavaScript相当于肌肉,CSS相当于皮肤,三者结合起来才能形成一个完善的网页。下面我们分别来介绍一下这三部分的功能。

    (1) HTML

    HTML是用来描述网页的一种语言,其全称叫作Hyper Text Markup Language,即超文本标记语言。网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是HTML。不同类型的文字通过不同类型的标签来表示,如图片用img标签表示,视频用video标签表示,段落用p标签表示,它们之间的布局又常通过布局标签div嵌套组合而成,各种标签通过不同的排列和嵌套才形成了网页的框架。

    在Chrome浏览器中打开百度,右击并选择“检查”项(或按F12键),打开开发者模式,这时在Elements选项卡中即可看到网页的源代码,如图2-9所示。

    54a8fb9e71d6317a78e586d7a860d0ee.png图2-9 源代码

    这就是HTML,整个网页就是由各种标签嵌套组合而成的。这些标签定义的节点元素相互嵌套和组合形成了复杂的层次关系,就形成了网页的架构。

    (2) CSS

    HTML定义了网页的结构,但是只有HTML页面的布局并不美观,可能只是简单的节点元素的排列,为了让网页看起来更好看一些,这里借助了CSS。

    CSS,全称叫作Cascading Style Sheets,即层叠样式表。“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理。“样式”指网页中文字大小、颜色、元素间距、排列等格式。

    CSS是目前唯一的网页页面排版样式标准,有了它的帮助,页面才会变得更为美观。

    图2-9的右侧即为CSS,例如:

    1

    2

    3

    4

    5

    6

    #head_wrapper.s-ps-islite .s-p-top {

    position:absolute;

    bottom:40px;

    width:100%;

    height:181px;

    }

    就是一个CSS样式。大括号前面是一个CSS选择器,此选择器的意思是首先选中id为head_wrapper且class为s-ps-islite的节点,然后再选中其内部的class为s-p-top的节点。大括号内部写的就是一条条样式规则,例如position指定了这个元素的布局方式为绝对布局,bottom指定元素的下边距为40像素,width指定了宽度为100%占满父元素,height则指定了元素的高度。也就是说,我们将位置、宽度、高度等样式配置统一写成这样的形式,然后用大括号括起来,接着在开头再加上CSS选择器,这就代表这个样式对CSS选择器选中的元素生效,元素就会根据此样式来展示了。

    在网页中,一般会统一定义整个网页的样式规则,并写入CSS文件中(其后缀为css)。在HTML中,只需要用link标签即可引入写好的CSS文件,这样整个页面就会变得美观、优雅。

    (3) JavaScript

    JavaScript,简称JS,是一种脚本语言。HTML和CSS配合使用,提供给用户的只是一种静态信息,缺乏交互性。我们在网页里可能会看到一些交互和动画效果,如下载进度条、提示框、轮播图等,这通常就是JavaScript的功劳。它的出现使得用户与信息之间不只是一种浏览与显示的关系,而是实现了一种实时、动态、交互的页面功能。

    JavaScript通常也是以单独的文件形式加载的,后缀为js,在HTML中通过script标签即可引入,例如:

    1

    综上所述,HTML定义了网页的内容和结构,CSS描述了网页的布局,JavaScript定义了网页的行为。

    2. 网页的结构

    我们首先用例子来感受一下HTML的基本结构。新建一个文本文件,名称可以自取,后缀为html,内容如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    ThisisaDemo

    Hello World

    Hello,thisisaparagraph.

    这就是一个最简单的HTML实例。开头用DOCTYPE定义了文档类型,其次最外层是html标签,最后还有对应的结束标签来表示闭合,其内部是head标签和body标签,分别代表网页头和网页体,它们也需要结束标签。head标签内定义了一些页面的配置和引用,如:

    1

    它指定了网页的编码为UTF-8。

    title标签则定义了网页的标题,会显示在网页的选项卡中,不会显示在正文中。body标签内则是在网页正文中显示的内容。div标签定义了网页中的区块,它的id是container,这是一个非常常用的属性,且id的内容在网页中是唯一的,我们可以通过它来获取这个区块。然后在此区块内又有一个div标签,它的class为wrapper,这也是一个非常常用的属性,经常与CSS配合使用来设定样式。然后此区块内部又有一个h2标签,这代表一个二级标题。另外,还有一个p标签,这代表一个段落。在这两者中直接写入相应的内容即可在网页中呈现出来,它们也有各自的class属性。

    将代码保存后,在浏览器中打开该文件,可以看到如图2-10所示的内容。

    f9a75b64c534c550001fa986d6fa8adc.png图2-10 运行结果

    可以看到,在选项卡上显示了This is a Demo字样,这是我们在head中的title里定义的文字。而网页正文是body标签内部定义的各个元素生成的,可以看到这里显示了二级标题和段落。

    这个实例便是网页的一般结构。一个网页的标准形式是html标签内嵌套head和body标签,head内定义网页的配置和引用,body内定义网页的正文。

    3. 节点树及节点间的关系

    在HTML中,所有标签定义的内容都是节点,它们构成了一个HTML DOM树。

    我们先看下什么是DOM,DOM是W3C(万维网联盟)的标准,其英文全称Document Object Model,即文档对象模型。它定义了访问HTML和XML文档的标准:

    W3C文档对象模型(DOM)是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。

    W3C DOM标准被分为3个不同的部分。

    核心DOM: 针对任何结构化文档的标准模型。

    XML DOM:针对XML文档的标准模型。

    HTML DOM:针对HTML文档的标准模型。

    根据W3C的HTML DOM标准,HTML文档中的所有内容都是节点。

    整个文档是一个文档节点;

    每个HTML元素是元素节点;

    HTML元素内的文本是文本节点;

    每个HTML属性是属性节点;

    注释是注释节点。

    HTML DOM将HTML文档视作树结构,这种结构被称为节点树,如图2-11所示。

    8dc00bbb3f7deaffc49d10ae70018283.png图2-11 节点树

    通过HTML DOM,树中的所有节点均可通过JavaScript访问,所有HTML节点元素均可被修改,也可以被创建或删除。

    节点树中的节点彼此拥有层级关系。我们常用父(parent)、子(child)和兄弟(sibling)等术语描述这些关系。父节点拥有子节点,同级的子节点被称为兄弟节点。

    在节点树中,顶端节点称为根(root)。除了根节点之外,每个节点都有父节点,同时可拥有任意数量的子节点或兄弟节点。图2-12展示了节点树以及节点之间的关系。

    50a96f8bae58a88522fef9f813b7d07a.png图2-12 节点树及节点间的关系

    4. 选择器

    我们知道网页由一个个节点组成,CSS选择器会根据不同的节点设置不同的样式规则,那么怎样来定位节点呢?

    在CSS中,我们使用CSS选择器来定位节点。例如,上例中div节点的id为container,那么就可以表示为#container,其中#开头代表选择id,其后紧跟id的名称。另外,如果我们想选择class为wrapper的节点,便可以使用.wrapper,这里以点(.)开头代表选择class,其后紧跟class的名称。另外,还有一种选择方式,那就是根据标签名筛选,例如想选择二级标题,直接用h2即可。这是最常用的3种表示,分别是根据id、class、标签名筛选,请牢记它们的写法。

    另外,CSS选择器还支持嵌套选择,各个选择器之间加上空格分隔开便可以代表嵌套关系,如#container .wrapper p则代表先选择id为container的节点,然后选中其内部的class为wrapper的节点,然后再进一步选中其内部的p节点。另外,如果不加空格,则代表并列关系,如div#container .wrapper p.text代表先选择id为container的div节点,然后选中其内部的class为wrapper的节点,再进一步选中其内部的class为text的p节点。这就是CSS选择器,其筛选功能还是非常强大的。

    另外,CSS选择器还有一些其他语法规则,具体如表2-4所示。

    表2-4 CSS选择器的其他语法规则

    选择器例子例子描述

    .class

    .intro

    选择class="intro"的所有节点

    #id

    #firstname

    选择id="firstname"的所有节点

    *

    *

    选择所有节点

    element

    p

    选择所有p节点

    element,element

    div,p

    选择所有div节点和所有p节点

    element element

    div p

    选择div节点内部的所有p节点

    element>element

    div>p

    选择父节点为div节点的所有p节点

    element+element

    div+p

    选择紧接在div节点之后的所有p节点

    [attribute]

    [target]

    选择带有target属性的所有节点

    [attribute=value]

    [target=blank]

    选择target="blank"的所有节点

    [attribute~=value]

    [title~=flower]

    选择title属性包含单词flower的所有节点

    :link

    a:link

    选择所有未被访问的链接

    :visited

    a:visited

    选择所有已被访问的链接

    :active

    a:active

    选择活动链接

    :hover

    a:hover

    选择鼠标指针位于其上的链接

    :focus

    input:focus

    选择获得焦点的input节点

    :first-letter

    p:first-letter

    选择每个p节点的首字母

    :first-line

    p:first-line

    选择每个p节点的首行

    :first-child

    p:first-child

    选择属于父节点的第一个子节点的所有p节点

    :before

    p:before

    在每个p节点的内容之前插入内容

    :after

    p:after

    在每个p节点的内容之后插入内容

    :lang(language)

    p:lang

    选择带有以it开头的lang属性值的所有p节点

    element1~element2

    p~ul

    选择前面有p节点的所有ul节点

    [attribute^=value]

    a[src^="https"]

    选择其src属性值以https开头的所有a节点

    [attribute$=value]

    a[src$=".pdf"]

    选择其src属性以.pdf结尾的所有a节点

    [attribute*=value]

    a[src*="abc"]

    选择其src属性中包含abc子串的所有a节点

    :first-of-type

    p:first-of-type

    选择属于其父节点的首个p节点的所有p节点

    :last-of-type

    p:last-of-type

    选择属于其父节点的最后p节点的所有p节点

    :only-of-type

    p:only-of-type

    选择属于其父节点唯一的p节点的所有p节点

    :only-child

    p:only-child

    选择属于其父节点的唯一子节点的所有p节点

    :nth-child(n)

    p:nth-child

    选择属于其父节点的第二个子节点的所有p节点

    :nth-last-child(n)

    p:nth-last-child

    同上,从最后一个子节点开始计数

    :nth-of-type(n)

    p:nth-of-type

    选择属于其父节点第二个p节点的所有p节点

    :nth-last-of-type(n)

    p:nth-last-of-type

    同上,但是从最后一个子节点开始计数

    :last-child

    p:last-child

    选择属于其父节点最后一个子节点的所有p节点

    :root

    :root

    选择文档的根节点

    :empty

    p:empty

    选择没有子节点的所有p节点(包括文本节点)

    :target

    #news:target

    选择当前活动的#news节点

    :enabled

    input:enabled

    选择每个启用的input节点

    :disabled

    input:disabled

    选择每个禁用的input节点

    :checked

    input:checked

    选择每个被选中的input节点

    :not(selector)

    :not

    选择非p节点的所有节点

    ::selection

    ::selection

    选择被用户选取的节点部分

    另外,还有一种比较常用的选择器是XPath,这种选择方式后面会详细介绍。

    本节介绍了网页的基本结构和节点间的关系,了解了这些内容,我们才有更加清晰的思路去解析和提取网页内容。

    展开全文
  • 网络爬虫基础总结

    2019-10-04 09:03:10
    网络爬虫基础总结网络爬虫1. 爬虫简介网页结构合理的创建标题,有助于目录的生成2.BeatufulSoup 解析网页3.更多请求/下载方式4.加速你的爬虫5.高级爬虫 这篇文章是对莫烦pyhton爬虫基础课进行一个总结,详细教程大家...


    这篇文章是对莫烦pyhton爬虫基础课进行一个总结,详细教程大家可以参考学习官网: https://morvanzhou.github.io/tutorials/data-manipulation/scraping/

    网络爬虫

    对于网络爬虫,我个人理解就是从网页爬取数据。那么要学习网络爬虫,你得弄清楚以下几个问题:(1)网页是什么?(2)数据在网页中怎么存储的?(3)如何爬取数据?让我们一起带着问题去开启爬虫学习之旅吧。

    本课程的教学流程如下图所示,不过这些都是些基础知识。有了基础之后,你才能更加深入自学。
    在这里插入图片描述

    1. 爬虫简介

    爬虫的产物产物无处不在, 比如说搜索引擎 (Google, 百度), 他们能为你提供这么多搜索结果, 也都是因为它们爬了很多信息, 然后展示给你. 再来说一些商业爬虫, 比如爬爬淘宝的同类商品的价格信息, 好为自己的商品挑选合适的价格. 爬虫的用途很多很多, 如果你搞机器学习, 爬虫就是你获取数据的一种途径, 网上的信息成百上千, 只要你懂爬虫, 你都能轻松获取。

    1. why? ,爬虫就是为了爬取所需数据为我所用;
    2. 知其然,也要知其所以然,我们必须了解网页结构

    网页结构

    学习爬虫, 首先要懂的是网页. 支撑起各种光鲜亮丽的网页的不是别的, 全都是一些代码. 这种代码我们称之为 HTML, HTML 是一种浏览器(Chrome, Safari, IE, Firefox等)看得懂的语言, 浏览器能将这种语言转换成我们用肉眼看到的网页. 所以 HTML 里面必定存在着很多规律, 我们的爬虫就能按照这样的规律来爬取你需要的信息.其实除了 HTML, 一同构建多彩/多功能网页的组件还有 CSS 和 JavaScript.

    网页的基本组成部分
    在 HTML 中, 基本上所有的实体内容, 都会有个 tag 来框住它. 而这个被 tag 住的内容, 就可以被展示成不同的形式, 或有不同的功能. 主体的 tag 分成两部分, header 和 body. 在 header 中, 存放这一些网页的网页的元信息, 比如说 title, 这些信息是不会被显示到你看到的网页中的. 这些信息大多数时候是给浏览器看, 或者是给搜索引擎的爬虫看.例如,莫烦爬虫测试1的网页代码就很好地展现了网页的节本结构,具体网页的HTML代码如下:
    在这里插入图片描述
    用python登录网页
    对网页结构和 HTML 有了一些基本认识以后, 我们就能用 Python 来爬取这个网页的一些基本信息. 首先要做的, 是使用 Python 来登录这个网页, 并打印出这个网页 HTML 的 source code. 注意, 因为网页中存在中文, 为了正常显示中文, read() 完以后, 我们要对读出来的文字进行转换, decode() 成可以正常显示中文的形式.

    from urllib.request import urlopen
    # if has Chinese, apply decode()
    html = urlopen(
        "https://morvanzhou.github.io/static/scraping/basic-structure.html"
    ).read().decode('utf-8')
    print(html)
    

    print 出来就是下面这样啦. 这就证明了我们能够成功读取这个网页的所有信息了. 但我们还没有对网页的信息进行汇总和利用. 我们发现, 想要提取一些形式的信息, 合理的利用 tag 的名字十分重要.

    <!DOCTYPE html>
    <html lang="cn">
    <head>
    	<meta charset="UTF-8">
    	<title>Scraping tutorial 1 | 莫烦Python</title>
    	<link rel="icon" href="https://morvanzhou.github.io/static/img/description/tab_icon.png">
    </head>
    <body>
    	<h1>爬虫测试1</h1>
    	<p>
    		这是一个在 <a href="https://morvanzhou.github.io/">莫烦Python</a>
    		<a href="https://morvanzhou.github.io/tutorials/scraping">爬虫教程</a> 中的简单测试.
    	</p>
    
    </body>
    </html>
    

    2.BeatufulSoup 解析网页

    Beautiful Soup 4.2.0 中文官网

    0.BeatufulSoup的介绍

    Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。 我们了解了网页 (html) 的基本构架, 知道了爬网页就是在这个构架中找到需要的信息. 那么找到需要的信息时, BeautifulSoup 就是一个找信息好帮手. 它能帮你又快有准地找到信息. 大大简化了使用难度。

    1.安装

    # Python 2+
    pip install beautifulsoup4
    #---------------------------------------------------
    # Python 3+
    pip3 install beautifulsoup4
    ```python
    在这里插入代码片
    

    2.1 简单使用

    `爬取基本网页,BeautifulSoup 使用起来非常简单, 我们先按常规读取网页。

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    
    # if has Chinese, apply decode()
    html = urlopen("https://morvanzhou.github.io/static/scraping/basic-structure.html").read().decode('utf-8')
    print(html
    

    回顾一下, 每张网页中, 都有两大块, 一个是 , 一个是 , 我们等会用 BeautifulSoup 来找到 body 中的段落

    和所有链接 .

    <!DOCTYPE html>
    <html lang="cn">
    <head>
    	<meta charset="UTF-8">
    	<title>Scraping tutorial 1 | 莫烦Python</title>
    	<link rel="icon" href="https://morvanzhou.github.io/static/img/description/tab_icon.png">
    </head>
    <body>
    	<h1>爬虫测试1</h1>
    	<p>
    		这是一个在 <a href="https://morvanzhou.github.io/">莫烦Python</a>
    		<a href="https://morvanzhou.github.io/tutorials/scraping">爬虫教程</a> 中的简单测试.
    	</p>
    
    </body>
    </html>
    

    读取其实很简单,直接soup.h1或soup.p,a链接就用soup.find_all(a).

    soup = BeautifulSoup(html, features='lxml')
    print(soup.h1)
    
    """
    <h1>爬虫测试1</h1>
    """
    
    print('\n', soup.p)
    
    """
    <p>
    		这是一个在 <a href="https://morvanzhou.github.io/">莫烦Python</a>
    <a href="https://morvanzhou.github.io/tutorials/scraping">爬虫教程</a> 中的简单测试.
    	</p>
    """
    """
    <a href="https://morvanzhou.github.io/tutorials/scraping">爬虫教程</a>
    """
    
    all_href = soup.find_all('a')
    all_href = [l['href'] for l in all_href]
    print('\n', all_href)
    
    # ['https://morvanzhou.github.io/', 'https://morvanzhou.github.io/tutorials/scraping']
    

    懂得这些还是远远不够的, 真实情况往往比这些复杂. BeautifulSoup 还有很多其他的选择”增强器”. 还得了解些 CSS 的概念, 用 BeautifulSoup 加上 CSS 来选择内容.

    2.2 BeautifulSoup 解析网页: CSS

    2.2.1 什么是 CSS

    其实CSS就是对页面进行渲染的,让页面更加好看,特别有“骨感”!下面就拿莫烦python网站举例子。
    在这里插入图片描述
    上面是没有加CSS的网页,如果有CSS,网页就变得丰富多彩起来. 文字有了颜色, 字体, 位置也多样了, 图片也有规则了,如下图所示。
    在这里插入图片描述
    所以, CSS 主要用途就是装饰你 “骨感” HTML 页面。

    2.2.1 CSS 的 Class

    网络爬虫必须掌握的一条CSS规则就是Class,CSS 在装饰每一个网页部件的时候, 都会给它一个名字. 而且一个类型的部件, 名字都可以一样.比如我们这个练习网页. 里面的字体/背景颜色, 字体大小, 都是由 CSS 来掌控的.
    在这里插入图片描述
    而 CSS 的代码, 可能就会放在这个网页的<head>中. 我们先使用 Python 读取这个页面.

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    
    # if has Chinese, apply decode()
    html = urlopen("https://morvanzhou.github.io/static/scraping/list.html").read().decode('utf-8')
    print(html)
    

    <head>中, 你会发现有这样一些东西被放在 <style> 里面, 这些东西都是某些 class 的 CSS 代码. 比如 jan 就是一个 class. jan 这个类掌控了这个类型的背景颜色. 所以在 <ul class="jan"> 这里, 这个 ul 的背景颜色就是黄色的. 而如果是 month 这个类, 它们的字体颜色就是红色.

    <head>
    	...
    	<style>
    	.jan {
    		background-color: yellow;
    	}
    	...
    	.month {
    		color: red;
    	}
    	</style>
    </head>
    
    <body>
    ...
    <ul>
    	<li class="month">一月</li>
    	<ul class="jan">
    		<li>一月一号</li>
    		<li>一月二号</li>
    		<li>一月三号</li>
    	</ul>
    	...
    </ul>
    </body>
    

    这样, 我们就知道, 有时候, 网页中, 这种 class 归类一些组件还是很有用的. 比如我就想找 jan 下面的这些<li>. 我就能通过寻找 class=“jan” 找到它们. BeautifulSoup 就能这么干.

    2.2.2 按 Class 匹配

    按 Class 匹配很简单. 比如我要找所有 class=month 的信息. 并打印出它们的 tag 内文字.

    soup = BeautifulSoup(html, features='lxml')
    
    # use class to narrow search
    month = soup.find_all('li', {"class": "month"})
    for m in month:
        print(m.get_text())
    
    """
    一月
    二月
    三月
    四月
    五月
    """
    

    或者找到 class=jan 的信息. 然后在 <ul>下面继续找<ul> 内部的 <li> 信息. 这样一层层嵌套的信息, 非常容易找到.

    jan = soup.find('ul', {"class": 'jan'})
    d_jan = jan.find_all('li')              # use jan as a parent
    for d in d_jan:
        print(d.get_text())
    
    """
    一月一号
    一月二号
    一月三号
    """
    

    如果想要找到一些有着一定格式的信息, 比如使用正则表达来寻找相类似的信息, 我们在 BeautifulSoup 中也能嵌入正则表达式, 让 BeautifulSoup 更为强大. 怎么用, 我们就接着往下看啦.

    2.3 BeautifulSoup 解析网页: 正则表达

    正则表达式, 是处理文本信息的重要工具, 除了 Python, 在其他的程序语言中, 也有十分重要的地位. 如果将正则表达式 + BeautifulSoup, 岂不是完美中的完美, 哈哈. 我们今天就来看看, 在 BeautifulSoup 中如何使用正则表达式, 获取更有难度的信息.

    2.3.1 正则表达式

    正则表达式很厉害, 它能用简单的规则匹配到多样化的文本信息.

    2.3.2 正则匹配

    先得读取网页,导入正则模块re。

    from bs4 import BeautifulSoup
    from urllib.request import urlopen
    import re
    
    # if has Chinese, apply decode()
    html = urlopen("https://morvanzhou.github.io/static/scraping/table.html").read().decode('utf-8')
    

    我们发现, 如果是图片, 它们都藏在这样一个 tag 中:

    <td>
        <img src="https://morvanzhou.github.io/static/img/course_cover/tf.jpg">
    </td>
    

    所以, 我们可以用 soup 将这些 <img> tag 全部找出来, 但是每一个 img 的链接(src)都可能不同. 或者每一个图片有的可能是 jpg 有的是 png, 如果我们只想挑选 jpg 形式的图片, 我们就可以用这样一个正则 r’.*?.jpg’ 来选取. 把正则的 compile 形式放到 BeautifulSoup 的功能中, 就能选到符合要求的图片链接了.

    soup = BeautifulSoup(html, features='lxml')
    
    img_links = soup.find_all("img", {"src": re.compile('.*?\.jpg')})
    for link in img_links:
        print(link['src'])
    
    """
    https://morvanzhou.github.io/static/img/course_cover/tf.jpg
    https://morvanzhou.github.io/static/img/course_cover/rl.jpg
    https://morvanzhou.github.io/static/img/course_cover/scraping.jpg
    """
    

    又或者我们发现, 我想选一些课程的链接, 而这些链接都有统一的形式, 就是开头都会有 https://morvan., 那我就将这个定为一个正则的规则, 让 BeautifulSoup 帮我找到符合这个规则的链接.

    course_links = soup.find_all('a', {'href': re.compile('https://morvan.*')})
    for link in course_links:
        print(link['href'])
    
    """
    https://morvanzhou.github.io/
    https://morvanzhou.github.io/tutorials/scraping
    https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/
    https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/
    https://morvanzhou.github.io/tutorials/data-manipulation/scraping/
    """
    

    接下来,给出一个实战小例子:爬百度百科

    3.更多请求/下载方式

    参考学习链接:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/3-01-requests/

    3.1 多功能的requests

    关于Requests模块的学习文档:中文官网

    3.1.1 获取网页的方式

    其实在加载网页的时候, 有几种类型, 而这几种类型就是你打开网页的关键. 最重要的类型 (method) 就是 get 和 post (当然还有其他的, 比如 head, delete).
    在这里插入图片描述
    这样看来, 很多网页使用 get 就可以了, 比如 莫烦Python 里的所有页面, 都是只是 get 发送请求. 而 post, 我们则是给服务器发送个性化请求, 比如将你的账号密码传给服务器, 让它给你返回一个含有你个人信息的 HTML.

    从主动和被动的角度来说, post 中文是发送, 比较主动, 你控制了服务器返回的内容. 而 get 中文是取得, 是被动的, 你没有发送给服务器个性化的信息, 它不会根据你个性化的信息返回不一样的 HTML.

    3.1.2 安装requests

    Requests 是一个 Python 的外部模块, 我们需要手动安装它. 简单的方法, 在你的 terminal 或者是 cmd, 使用 pip 安装就好了.

    # python 2+
    pip install requests
    
    # python 3+
    pip3 install requests
    

    3.1.3 requests get 请求

    典型的搜索就是一个requests get请求。首先, 我们固定不动的网址部分是 http://www.baidu.com/s, ? 后面的东西都是一些参数 (parameters), 所以我们将这些 parameters 用 python 的字典代替, 然后传入 requests.get() 功能. 然后我们还能用 python (webbrowser模块) 打开一个你的默认浏览器, 观看你是否在百度的搜索页面.

    import requests
    import webbrowser
    param = {"wd": "莫烦Python"}  # 搜索的信息
    r = requests.get('http://www.baidu.com/s', params=param)
    print(r.url)
    webbrowser.open(r.url)
    
    # http://www.baidu.com/s?wd=%E8%8E%AB%E7%83%A6Python
    

    这时, python 会弹出一个浏览器界面, 然后你看到的, 就是 “莫烦Python” 的搜索结果了.

    3.1.4 requests post 请求

    post 又怎么用呢?其实就是提交信息给另外一个网页。我们有一个提交信息的窗口, 如果我提交上去这个信息, 那边的服务器会更加这个提交的信息返回出另一个网页. 这就是网页怎么样使用你 post 过去的信息了.
    在这里插入图片描述

    3.1.5 上传图片

    传照片也是 post 的一种, 我们得将本地的照片文件传送到服务器.

    3.1.6 登录

    用 post 还有一个重要的, 就是模拟登录.

    3.1.7 使用Session登录

    不过每次都要传递 cookies 是很麻烦的, 好在 requests 有个很 handy 的功能, 那就是 Session. 在一次会话中, 我们的 cookies 信息都是相连通的, 它自动帮我们传递这些 cookies 信息. 这时我感叹, 程序员真会偷懒~ 哈哈.

    同样是执行上面的登录操作, 下面就是使用 session 的版本. 创建完一个 session 过后, 我们直接只用 session 来 post 和 get. 而且这次 get 的时候, 我们并没有传入 cookies. 但是实际上 session 内部就已经有了之前的 cookies 了.

    session = requests.Session()
    payload = {'username': 'Morvan', 'password': 'password'}
    r = session.post('http://pythonscraping.com/pages/cookies/welcome.php', data=payload)
    print(r.cookies.get_dict())
    # {'username': 'Morvan', 'loggedin': '1'}
    
    r = session.get("http://pythonscraping.com/pages/cookies/profile.php")
    print(r.text)
    
    # Hey Morvan! Looks like you're still logged into the site!
    

    3.2 下载文件

    参考学习链接:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/3-02-download/

    3.3 小练习:下载美图

    参考学习链接:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/3-03-practice-download-image/

    4.加速你的爬虫

    主要通过多进程分式和异步加载Asyncio方式加速爬虫,参考学习链接:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/4-01-distributed-scraping/

    5.高级爬虫

    主要包括两个内容: 让 Selenium 控制你的浏览器帮你爬、高效无忧的 Scrapy 爬虫库。
    参考学习链接:https://morvanzhou.github.io/tutorials/data-manipulation/scraping/5-01-selenium/

    6 Scrapy项目

    以当当商品爬虫为例,讲述一下Scrapy项目的搭建流程

    当当网商品爬虫实战
    	基础补充:XPath表达式
    	
    	XPath表达式与正则表达式简单对比:
    	1、XPath表达式效率或高一点
    	2、正则表达式功能会强大一点
    	3、一般来说,优先选择我XPath,但是XPath解决不了的问题我们就会选正则表达式去解决。
    
    创建项目的cmd命令如下:
    1、打开cmd,进入创建放置项目的目录: 
    	C:\Users\xuefa> cd /d F:\Projects\Python\python3_spider\scrapy
    2、开始创建项目
    	F:\Projects\Python\python3_spider\scrapy>scrapy startproject dangdang
    3、创建爬虫文件
    	F:\Projects\Python\python3_spider\scrapy>cd dangdang
    	F:\Projects\Python\python3_spider\scrapy\dangdang>scrapy genspider -t basic dd dangdang.com
    4、打开pycharm编写代码
    	(1)在items.py中定义你要爬取的东西
    		items.py的路径:F:\Projects\Python\python3_spider\scrapy\dangdang\dangdang\items.py
    		
    	(2)在爬虫文件dd.py中提取爬取信息,提交给pipeline
    		# 提取信息
    		def parse(self, response):
    			....
    			
    	(3)在pipelines.py中处理数据
    		首先要在setting.py取消pipeline的注释,连接pymysql,写sql语句
    	
    5、编写爬虫文件:dd.py
    	dd.py的路径:F:\Projects\Python\python3_spider\scrapy\dangdang\dangdang\spiders
    6、运行爬虫文件:scrapy crawl dd --nolog
    	F:\Projects\Python\python3_spider\scrapy\dangdang\dangdang>scrapy crawl dd --nolog
    

    最后推荐一下,对于python学习的入门教程,大家可以看莫烦Python

    展开全文
  • 面对网页大量的数据,有时候还要翻页,你还在一页一页地复制粘贴吗?别人需要几小时完成的任务,学会这个小技巧你只需要几分钟就能解决。快来学习使用Excel快速批量地爬取网页数据吧!1、分析网页数据结构观察要爬取...

    面对网页大量的数据,有时候还要翻页,你还在一页一页地复制粘贴吗?别人需要几小时完成的任务,学会这个小技巧你只需要几分钟就能解决。快来学习使用Excel快速批量地爬取网页数据吧!

    1、分析网页数据结构

    观察要爬取数据的网页结构,如要获取印尼农药登记数据,打开网页:

    http://pestisida.id/simpes_app/rekap_formula_nama.php?s_keyword=&rekap_formula_nama1Page=1

    可以看到,我们要获取总共74页的数据,而网页中的参数则代表了不同的参数,在网址中的最后一个参数就是页码数,将“1”改成1-74的数字就是我们要爬取的网址。

    171320409_1_2019091808450151

    2、爬取单个网页数据

    1)打开Excel 2019,依次点击“数据”→“自网站”

    171320409_2_20190918084501254

    2)在弹出的“从Web”对话框中选“高级”,在“URL部分”第一栏中输入不含有参数的网址,如:http://pestisida.id/simpes_app/rekap_formula_nama.php?s_keyword=&rekap_formula_nama1Page=,在第二栏中输入1表示抓取第一页的数据,最后点击“确定”。

    如果有多个参数,则每个参数设置为一栏。

    171320409_3_20190918084501645

    3)在弹出的“导航器”对话框中,选中左边需要的数据,右边可以预览到抓取的数据,最后点“编辑”,这样就可以抓取到一页网页的数据了。

    171320409_4_20190918084501832

    3、爬取多个网页数据

    1)在弹出的“Power Query编辑器”的编辑界面中,依次选择“开始”→“高级编辑器”,在编辑框的“let”前面加入语句“(p as number) as table =>”,并将“源”后面的网页参数“1”换成“(Number.ToText(p))”(不含引号),检查没有语法错误后点击“完成”,返回“Power Query编辑器”的编辑界面。

    171320409_5_2019091808450298

    2)在返回的“Power Query编辑器”的编辑界面中,点击左边的“查询”栏上的箭头“>”,可以修改函数的名称,如“Indonesia Pesticide”。

    171320409_6_20190918084502457

    3)依次点击“开始”→“新建源”→“其他源”→“空查询”,在函数编辑栏中输入“” ,即要爬取的网页数,回车,生成序列,最后点中任意数列的值,选择“到表”,在弹出的“到表”对话框中点击确定即可。

    171320409_7_20190918084502754

    171320409_8_201909180845034

    171320409_9_20190918084503301

    4)选中左边栏的“查询1”,依次点击“添加列”→“调用自定义函数”,弹出“调用自定义函数”对话框中,在“功能查询”下拉菜单中选择刚才命名的函数“Indonesia Pesticide”,其它的会自动填写,点击“确定”就开始爬取网页数据了。

    171320409_10_20190918084503551

    171320409_11_20190918084503785

    4、保存网页爬取数据

    展开全文
  • 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索...
  • 1.1.1知识概述 介绍网络爬虫的课时安排,以及简单介绍当前课程在大数据课程中的重要性。 1.1.2视频详情 1.1.3总结与补充 ...爬虫又叫网络爬虫,网络蜘蛛,一种运行在互联网用来获取数据的...
  • 网络爬虫技术

    千次阅读 2019-04-24 17:20:12
    网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,它们被广泛用于互联网搜索引擎或其他类似网站,可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的内容和检索...
  •   因为一些需要,我需要获取某一些类型的APP的名字,一个一个找然后记下来太痛苦了,于是自己琢磨着敲了一个小爬虫,在应用市场爬取这些APP的名字。   本文以爬取“应用宝”的游侠的名字为例。 第一步:...
  • python网络爬虫通用爬取步骤

    千次阅读 2019-05-16 15:51:51
    根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 ... 通用网络爬虫 从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统...
  • 山东建筑大学计算机网络课程设计《基于Python的网络爬虫设计》 山东建筑大学 课 程 设 计 成 果 报 告 题 目: 基于Python的网络爬虫设计 课 程: 计算机网络A 院 (部): 管理工程学院 专 业: 信息管理与信息系统 ...
  • 通过网络爬虫采集大数据

    千次阅读 2019-06-25 22:00:00
    网络数据采集是指通过网络爬虫或网站公开 API 等方式从网站获取数据信息。该方法可以将非结构化数据从网页中抽取出来,将其存储为统一的本地数据文件,并以结构化的方式存储。它支持图片、音频、视频等文件或附件...
  • Python3网络爬虫快速入门实战解析

    万次阅读 多人点赞 2017-09-28 14:48:41
    请在电脑的陪同下,阅读本文。本文以实战为主,阅读过程...本文的实战内容有:网络小说下载(静态网站)、优美壁纸下载(动态网站)、爱奇艺VIP视频下载 PS:本文为Gitchat线上分享文章,该文章发布时间为2017年09月19日。
  • 以上部分过程文字解释: 抓取实际访问的动态页面的url:   正则表达式: 正则表达式的使用有两种思路,可以参考个人有关其简述:python实现简单爬虫以及正则表达式简述 更多的细节介绍可以参考网上资料,搜索...
  • Java 网络爬虫,就是这么的简单

    万次阅读 多人点赞 2019-10-08 08:52:43
    这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识。第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑列表新闻的新闻标题和...
  • 前言:今天跟大家分享pathoy之爬虫,pathoy之爬虫技术的用处范围非常广泛以及非常强大的一门技术。在介绍爬虫之前,可以先跟大家讲讲pathoy这一门技术。 一、Pathoy的简介 二、pathoy之爬虫介绍 三、...
  • 网页爬虫教程

    万次阅读 多人点赞 2018-09-08 00:18:54
    学习爬虫, 首先要懂的是网页. 支撑起各种光鲜亮丽的网页的不是别的, 全都是一些代码. 这种代码我们称之为 HTML, HTML 是一种浏览器(Chrome, Safari, IE, Firefox等)看得懂的语言, 浏览器能将这种语言转换成我...
  • 简述以下的代码是使用python实现的网络爬虫,抓取动态网页http://hb.qq.com/baoliao/。此网页中的最新、精华下面的内容是由JavaScript动态生成的。审查网页元素与网页源码是不同。本人对于Python学习创建了一个小小...
  • 爬虫最基础的工作就是抓取网页。 比如我们打开百度的首页: 百度的首页就相当于是一个爬虫入口。在这个入口中有非常多的URL,而这些URL又相当于是子入口。在这些子入口的后面又是更多的URL。 2 爬虫是怎么工作的? ...
  • 网络爬虫技术总结

    千次阅读 2019-09-24 12:45:21
    网络爬虫技术总结 http://mp.weixin.qq.com/s?__biz=MzI3MTI2NzkxMA==&mid=2247484132&idx=1&sn=8db587fabc3c630decf0419b6130770e&scene=23&srcid=0720ZByjAlOM9YC5c76N9uKU#rd  对于大数据...
  • ——余华《活着》 之前小编提到过网络爬虫的风险,即保护个人数据/信息的重要性。当然,小编这里不是要大家去爬取个人信息,而是因为有这样可能的存在,就越要保护好自己的隐私。那么我们在爬取网页时如何找到对我们...
  • 爬虫(一)网络爬虫/相关工具与知识

    万次阅读 多人点赞 2018-06-02 15:12:46
    网络爬虫 网络爬虫(web crawler), 以前经常称为网络蜘蛛(spider), 是按照一定的规则自动浏览... 网络爬虫系统正是通过网页中的超链接信息不断获得网络的其他页面. 正因为如此, 网络数据采集的过程就像一个爬虫或...
  • 课程主要以爬取学生信息、爬取城市天气预报、爬取网站图像、爬起图书网站图书、爬取商城网站商品等5个项目为依托,讲解Web、正则表达式、...CSS、Scrapy、Selenium、多线程、深度与广度优先搜索等Python爬虫技术...

空空如也

空空如也

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

网络爬虫网页上所有文字

爬虫 订阅