爬虫初学1

一、读懂网页结构

1.什么是HTML (标记语言)
html是用来描述网页的一种语言
html指超文本标记语言
html使用标记标签来描述网页
html文档=网页
2.标签、元素、属性

1)标签:HTML标签由尖括号包围的关键字 eg:< html>
         通常成对出现 eg:< b> 和< /b>
         前一个称为开始标签,也叫开放标签;后一个为结束标签,也叫闭合标签
2)元素:指的是由开始标签到结束标签的所有代码
         以开始标签起始,结束标签终止
         某些html元素具有空内容
         空元素以开始标签的结束而结束
3)属性:HTML标签可以拥有属性。属性提供了有关HTML元素更多的有关信息
         属性总是以名称或值对的形式出现,eg:name=‘value’。
         属性总是在html元素的开始标签中规定

3.头部信息和主体信息(两种特殊的标签)

< html> 下两大节点 < head> < body>
1)头部信息:< head >
2)主体信息:< body> 主题信息会显示在网页上,核心内容

4.基本标签

1)标题:< title>

  • 标题是通过< h1>-< h6>进行定义的
  • < h1>定义最大的标题,< h6>定义最小的标题

2)段落:< p>

  • 段落是通过< p>标签定义的

3)样式:< style> 提供一种能改变所有HTML元素的样式的方法
4)链接:< a>

  • 超链接可以是一个字,一个词,或一组词,一幅图像等,可以点击这些内容跳转到新得文档或当前文档中得某一部分
  • 通过使用href属性—创建指向另一文档得链接
  • 通过使用name属性—创建文档内得书签

5)图像:< img>

  • 在html中,图像由< img> 标签定义
  • 图像得属性中也可以加图片链接,通过src属性

6)列表:无序列表< ul>  有序列表< ol> 列表项 < li>
7)块:< div>  < span>

  • < div> 块级元素,用于组合其他HTML元素得容器
  • < span> 内联元素,可用作文本得容器

8)脚本:< script> 用于定义客户端脚本,比如javaScript(高级语言)

二、页面解析及标签提取

1.用python访问网页

requests包:是python得一个http客户端库,向网页发送请求

import requests
u='https://book.douban.com/latest'   #网址
r=requests.get(url=u)
r输出为    200  成功处理请求 
           404  未找到
r.text  #查看网页源代码
2.解析数据

BeautifulSoup

from bs4 import BeautifulSoup
soup=BeautifulSoup(r.text,'lxml') 、

soup.h1 #查看一级标题
soup.find('h1')   #同上 ,获取第一个h1
#获取所有标签,以列表格式呈现,以逗号隔开 
soup.find_all('h2')

爬虫实例

1.访问网页 :使用requests去访问
import requests
u='https://book.douban.com/latest'   #网址
r=requests.get(url=u)
r.text  #访问网页的源代码

2.解析网页:使用BeautifulSoup解析网页
from bs4 import BeautifulSoup     #pip安装此包   终端pip install bs4
soup=BeautifulSoup(r.text,'lxml')    #lxml是一个HTML解析器

3.爬虫详解
soup.find('div',id='content')  
soup.find('div',{'id':'content'}) #查找所有标签为div,类id为content的内容
soup.find('div',id='content').h1  #查看h1下的内容
soup.find('div',id='content').h1.text  #数据采集文字信息    
soup.find('ul',class_='cover-col-4 clearfix') #注:class_ #由于class是一个类,所以后面要加-,避免和class关键字重复
soup.find('ul',{'class':'cover-col-4 clearfix'}).li   #查看第一本书的信息
#dic['星级数']=li0.find('span',class_="cur_star")['style'] #或者.attrs['style'],当信息在属性中时,采用本方法
#找到每本书的信息,并以列表形式存储
lis=soup.find('ul',class_='cover-col-4 clearfix').find_all('li')
#以一本书信息为例,采集数据
li1=lis[0] 
lis[0].find_all('a')[0].find('img').get('src') #找到类a标签开头的第一个,img标签开头,用find中返回对象的get方法得到src
li1.h2.text.replace(' ','').replace('\n','')   # .replace(' ','').replace('\n','') 表示替换格式,去除文本前后多余的空格
li1.find('p',class_='color-gray').get_text(strip=True)  # get_text()返回纯文本格式,括号里面写 strip=True去除空格,效果同上
dic={}  #以字典形式存储信息
dic['书名']=li1.h2.text.replace(' ','').replace('\n','')
dic['其他信息']=li1.find('p',class_='color-gray').get_text(strip=True)
#当信息为空时,无法提取text时
score_node=li1.find('span',class_='rating_nums')
    try:
        dic['评分']=li.find('span',class_='rating_nums').text
    except AttributeError:
        dic ['评分']='-'
#把每本书的信息写成DataFrame格式
dataset=[]
dataset.append(dic)
import pandas as pd
df=pd.DataFrame(dataset)
import requests
from bs4 import BeautifulSoup
n=0
for u in urllst:
    r=requests.get(url=u)
    soup=BeautifulSoup(r.text,'lxml')
    lis=soup.find('ul',class_='subject-list').find_all('li')
    for li in lis:
        dic={}#创建空字典存储数据
        dic['书名']=li.h2.text.replace(' ','').replace('\n','')
        dic['其他信息']=li.find('div',class_='pub').get_text(strip=True)
        score_node=li.find('span',class_='rating_nums')
        #解决代码块信息为空的情况,也就是无法提取text时
        try:
            dic['评分']=li.find('span',class_='rating_nums').text
        except AttributeError:
            dic ['评分']='-' 
        print(dic)
        dataset.append(dic)#将字典加入列表
        n+=1
        print('成功采集%i条数据'%n)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值