设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3058|回复: 2

python网页爬虫

  [复制链接]

5

主题

63

金钱

111

积分

入门用户

发表于 2018-6-4 14:21:32 | 显示全部楼层 |阅读模式

一、了解网页:
        在学习爬虫之前,首先要搞懂网页,而支撑起这些光鲜亮丽的网页就是一些代码,这些代码就是HTML,HTML是一种浏览器(谷歌,火狐,百度)看得懂的语言,所以HTML必定存在某些规律,搞清楚这些规律,就可以抓取我们想要的内容啦。其实构建网页的组件除了HTML之外还有CSS和Javascript。(后续会介绍,先学简单的)

二、网页的基本组成部分
        首先我们可以使用开发者工具来搜索标记代码,在Chrome中选择“更多工具”->"开发者工具",就可以看到HTML的源码了。打开就是这样子,(我自己习惯用谷歌浏览器,这是blog的source code)


python网页爬虫1.png python网页爬虫2.png

在 HTML 中, 基本上所有的实体内容, 都会有个 tag 来框住它. 而这个被 tag 住的内容, 就可以被展示成不同的形式, 或有不同的功能. 主体的 tag 分成两部分, head 和 body. 在 head 中, 存放这一些网页的网页的元信息, 比如说 title, 这些信息是不会被显示到你看到的网页中的. 这些信息大多数时候是给浏览器看, 或者是给搜索引擎的爬虫看.

(这里我用了莫烦python的一个例子)

而body 这部分才是你看到的网页信息. 网页中的 header, 视频, 图片和文字等都存放在这里. 这里的 <h1></h1> tag 就是主标题, 我们看到呈现出来的效果就是大一号的文字. <p></p> 里面的文字就是一个段落. <a></a>里面都是一些链接. 所以很多情况, 东西都是放在这些 tag 中的.

爬虫想要做的就是根据这些 tag 来找到合适的信息.

三、用Python登录网页
用 Python 来爬取这个网页的一些基本信息. 首先要做的, 是使用 Python 来登录这个网页, 并打印出这个网页 HTML 的 source code. 注意, 因为网页中存在中文, 为了正常显示中文, read() 完以后, 我们要对读出来的文字进行转换, decode()成可以正常显示中文的形式.!!!编码问题

这是我在python2.7上写的代码,python3.6同那个样适用。

  1. import  urllib2  
  2. import urllib  
  3. #if has Chinese ,apply decode()  
  4. html = urllib2.urlopen(  
  5.     "https://morvanzhou.github.io/static/scraping/basic-structure.html"  
  6. ).read().decode('utf-8')  
  7. print html
复制代码

输出结果如下:

  1. <!DOCTYPE html>  
  2. <html lang="cn">  
  3. <head>  
  4.     <meta charset="UTF-8">  
  5.     <title>Scraping tutorial 1 | 莫烦Python</title>  
  6.     <link rel="icon" >  
  7. </head>  
  8. <body>  
  9.     <h1>爬虫测试1</h1>  
  10.     <p>  
  11.         这是一个在 <a >莫烦Python</a>  
  12.         <a >爬虫教程</a> 中的简单测试.  
  13.     </p>  
  14.   
  15. </body>  
  16. </html>  
复制代码

我们现在已经成功读取了网页,接下来我们想要提取信息们就要合理适用这些tag了。


    四、匹配网页的内容


    这里我们使用 Python 的正则表达式 RegEx 进行匹配文字, 筛选信息的工作.  对于初级的网页匹配, 我们使用正则完全就可以了, 高级一点或者比较繁琐的匹配, 我还是推荐使用 BeautifulSoup. 不急不急, 我知道你现在可能看不下去了,太长了, 马上就会学 beautiful soup 了. 但是现在我们还是使用正则来做几个简单的例子, 让你熟悉一下套路.

    如果我们想用代码找到这个网页的 title, 我们就能这样写. 选好要使用的 tag 名称 <title>. 使用正则匹配.

    1. import  urllib2  
    2. import re  
    3. #if has Chinese ,apply decode()  
    4. html = urllib2.urlopen(  
    5.     "https://morvanzhou.github.io/static/scraping/basic-structure.html"  
    6. ).read().decode('utf-8')  
    7. res = re.findall(r"<title>(.+?)</title>",html)  
    8. #print html  
    9. print ("\nPage Title is :",res[0])  
    复制代码

    我这里的输出出现了编码问题,希望有大神能够讲解一发,先看一下我的输出


    1. ('\nPage Title is :', 'Scraping tutorial 1 | \xe8\x8e\xab\xe7\x83\xa6Python')  
    复制代码

    如果想要找到中间的那个段落 <p>, 我们使用下面方法, 因为这个段落在 HTML 中还夹杂着 tab, new line, 所以我们给一个 flags=re.DOTALL 来对这些 tab, new line 不敏感.(就在上一个代码的html后面“,flag=re.DOTALL”即可,我就不写了)


224

主题

2万

金钱

3万

积分

专家用户

发表于 2018-12-18 20:34:31 | 显示全部楼层
我看看,谢谢
大道无痕……
回复 支持 反对

使用道具 举报

224

主题

2万

金钱

3万

积分

专家用户

发表于 2018-12-18 20:35:16 | 显示全部楼层
好像这个很简单,但却不乏实用,谢谢!
大道无痕……
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表