网页内容爬取

9-19 1,330 views

一、普及下html知识

首先看下html结构图

python的爬虫的原理是模仿人去访问网页内容,同时将你有需要的内容提取出来,所以在html中功能那块爬虫会用的比较少,主要用的还是html的结构和样式。

html基本结构:


<html>
<head>
<title>放置文章标题</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> //这里是网页编码现在是gb2312
<meta name="keywords" content="关键字" />
<meta name="description" content="本页描述或关键字描述" />
</head>
<body>
这里就是正文内容
</body>
</html>

我们这边细讲下body(正文)里结构,因为我们一般抓取的内容在正文的比例相对较多。

首先认识下<div> </div>标签,这是一个划分区域的标签,还有<p> </p>的文本标签 ,还有css样式一般放在标签里,如:<div class=”a”> </div> ,<li> </li>列表标签。<img>插入图片标签,<h1> </h1>,h1-h6都行,这个标签是代表不同字号的标题,<a href= ” “> 链接标签。

自己写的一个简易网页代码:


<body>
<div class='a'>
<p>区域一</p>
<li>
<img src="imges\0.jpg" width="100" height="90">
</li>
</div>
<div class='b'>
<p>区域二</p>
<li>
<img src="imges\1.jpg" width="100" height="90">
</li>
</div>
<div class='c'>
<p>区域三</p>
<li>
<img src="imges\2.jpg" width="100" height="90">
</li>
</div>
</body>

二、使用BeautifulSoup来解析网页

第一步:soup = BeautifulSoup(wb_data, 'lxml')  使用BeautifulSoup方法解析网页
第二步:(要爬取的信息)= soup.select('???') 要爬取的信息在哪?

第三步:<p>someting</p> 从标签中获取信息,去除没用的信息和结构。

第四步:将获取的数据放在数据容器中,方便我们读取。

用浏览器打开网页,按f12找到图片路径,copy图片路径路径,有2种copy方法,1.Css selector 2.Xpath 今天我们用的BeautifulSoup只支持Css selector路径方法。

第一步,获取网页信息

python代码获取网页内容信息:

<pre># -*- coding:utf-8 -*-
from bs4 import BeautifulSoup          #导入BeautifulSoup库
with open(r'C:\Users\ycy\Desktop\index.html', 'rb') as wb_data:  #由于网页是本地的,直接是用文件函数open打开
    soup = BeautifulSoup(wb_data, 'lxml')                     #解析文件
    print(soup)                         #打印网页内容

第二步,信息获取到了,我们需要选择信息。首先,将文本信息和图片信息分类,用—分隔。

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup          #导入BeautifulSoup库
with open(r'C:\Users\ycy\Desktop\index.html', 'rb') as wb_data:  #由于网页是本地的,直接是用文件函数open打开
    soup = BeautifulSoup(wb_data, 'lxml')                     #解析文件
    # print(soup)                    #打印网页内容
    images = soup.select('body > div > li > img')
    test = soup.select('body > div > p')
    print(images,test,sep='\n-------------------------\n')

第三步,将信息放到容器中,如:字典

# -*- coding:utf-8 -*-
from bs4 import BeautifulSoup          #导入BeautifulSoup库
with open(r'C:\Users\ycy\Desktop\index.html', 'rb') as wb_data:  #由于网页是本地的,直接是用文件函数open打开
    soup = BeautifulSoup(wb_data, 'lxml')                     #解析文件
    # print(soup)                    #打印网页内容
    images = soup.select('body > div > li > img')
    tests = soup.select('body > div > p')
    # print(images,test,sep='\n-------------------------\n')
for image,test in zip(images,tests):
    data = {
        'test':test.get_text(),
        'image':image.get('src')
    }
    print(data)

三、解析真实网页

上面是我们自己写的最最简单的一个本地网页,下面我们开始用网上真实网页做测试。
注意:利用copy selector时报错出现:
NotImplementedError: Only the following pseudo-classes are implemented: nth-of-type. 原因是:lxml解析不支持nth-child,只需将你copy的地址中nth-child改为nth-of-type即可 解决办法为:nth-child改为nth-of-type 具体参见:http://stackoverflow.com/questions/24720442/selecting-second-child-in-beautiful-soup-with-soup-select

 

 

python的zipfie简单应用

一、场景案例 需求:当开发上传某一个zip包时,自动解压到当前目录。已经解压过得zip包不再解压! 此处用到的模块有Python3自有模块os,sys,time,json,re,zipf...

阅读全文

vip电影的解析

一、出现的原因 由于各大互联网视频app均推出了“轻奢主义”的营销模式,导致了很多优质视频需要我们办这个月卡、年卡才能观看,更离谱的是腾讯最近推出了会员...

阅读全文

logging日志模块

一、日志输出合理的必要性 日式收集使我们日常工作中都会遇到的问题,而一个好的日志输出,则会给收集工作带来大大的效率提升。同时能够给程序员自己排错带来...

阅读全文

欢迎留言