网页及爬虫

网页组成

一般后缀为.html
HTML: HyperText Markup Language 超文本标记语言
CSS: Cascading Style Sheet 层叠样式表
JS: JavaScript

HTML 负责定义网页的内容;HTML 是网页的基本结构
CSS 负责描述网页的布局;描述网页的表现形式(例如网页元素的位置、大小、颜色等)
JavaScript 负责网页的行为

HTML

由<>包围的特殊标记,这叫做 HTML 标签(Tag);成对出现得;最后<head>…</head>都会加个/

<!DOCTYPE html> 声明为 HTML5 文档
<html>..</html> 是网页的根元素
<head>..</head> 元素包含了文档的元(meta)数据,如 <meta charset="utf-8"> 定义网页编码格式为 utf-8。
<title>..<title> 元素描述了文档的标题;网页标题会显示在浏览器的标签栏
<body>..</body> 表示用户可见的内容
<div>..</div> 表示框架
<p>..</p> 表示段落
<ul>..</ul> 定义无序列表
<ol>..</ol>定义有序列表
<li>..</li>表示列表项
<img src="" alt="">表示图片
<h1>..</h1>表示标题
<a href="">..</a>表示超链接
<a href="http://c.biancheng.net/html/" target="_blank">HTML教程(新窗口打开)</a>
<a href="http://c.biancheng.net/css3/">CSS教程(当前窗口打开)</a>
<img> 标签表示一张图片;
<table> 标签表示一个表格;
<input> 标签表示一个输入框;
<p> 标签表示一段文本;
<strong> 标签表示文本加粗效果;
<div> 标签表示块级布局
<h1>这是一个一级标题</h1>
<h2>这是一个二级标题</h2>
<h3>这是一个三级标题</h3>
<input type="text" /> :用来定义一个输入框
<b>编程</b> : 加粗
<small>小号字体</small>
<h1><h6>六个级别的标题标签
换行标签<br /> 不需要结束符如:<p>C语言中文网<br />http://c.biancheng.net/html/<br />HTML教程</p>; 分成三行
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>这是网页标题--个人</title>
</head>
<body>
    <p>这是一段文本</p>
    <a href="https://mp.csdn.net/mp_blog/creation/success/124440121">这个一个超链接</a>
    <ul>
        <li>条目1</li>
        <li>条目2</li>
        <li>条目3</li>
    </ul>
</body>
</html>

在这里插入图片描述

CSS

CSS 的主要作用是定义网页的样式(美化网页),对网页中元素的位置、字体、颜色、背景等属性进行精确控制。CSS 不仅可以静态地修饰网页,还可以配合 JavaScript 动态地修改网页中元素的样式。

/*单行注释*/

/*
    多行注释
*/

CSS 样式规则由三个部分组成,分别是选择器、属性和值。
在这里插入图片描述

选择器 h1 表示要为网页中所有的<h1>标签定义样式;
属性 color 表示字体颜色,值 blue 则表示将字体设置为蓝色;
属性 text-align 表示文本的对齐方式,值 center 则表示将文本的对齐方式设置为居中对齐

注释代码:使用/* */将这段代码注释起来:/*color: red;*/
标签选择器
h1 {
    color: blue;
    text-align: center;
}

设置CSS样式:
标签–内嵌样式

    <head>
        <title>编程帮</title>
        <style>
            /* 为所有 h1 标签设置 CSS 样式 */
            h1 {
                color: blue;        /*设置字体颜色为蓝色*/
                text-align: center; /*设置对齐方式为居中对齐*/
            }
            /* 为所有 p 标签设置 CSS 样式 */
            p {
                color: red;         /*设置字体颜色为红色*/
                font-size: 18px;    /*设置字体大小为 18 像素*/
            }
        </style>
    </head> 

内联样式

    <body>
        <h1 style="color: maroon; margin-left: 40px">编程帮</h1>
        <p style="color: blue;">http://www.biancheng.net/</p>
    </body>

爬虫

http://www.biancheng.net/index?param=10
路径和查询字符串之间使用问号?隔开。上述示例的域名为 www.biancheng.net,路径为 index,查询字符串为 param=10
冒号:用于分隔协议和主机组件,斜杠用于分隔主机和路径
?:用于分隔路径和查询参数等。
=用于表示查询参数中的键值对。
&符号用于分隔查询多个键值对。

#windows会存在乱码问题,需要使用 gbk解码,并使用ignore忽略不能处理的字节
#linux不会存在上述问题,可以直接使用decode('utf-8')解码
 html=res.read().decode("gbk","ignore")
# -*- coding:utf-8 -*-

from urllib import request
response=request.urlopen('https://www.maoyan.com/board')
print(response)
#提取响应内容
##通过调用 response 响应对象的 read() 方法提取 HTML 信息,该方法返回的结果是字节串类型(bytes),因此需要使用 decode() 转换为字符串
html = response.read().decode('utf-8')
#打印响应内容
print(html)

urlopen()

urllib.request.urlopen(url,timeout) ##向url发起请求;返回的是字节类型
urlopen() 有两个参数,说明如下:
url:表示要爬取数据的 url 地址。
timeout:设置等待超时时间,指定时间内未得到响应则抛出超时异常。

Request()

创建请求对象、包装请求头,比如重构 User-Agent(即用户代理,指用户使用的浏览器)使程序更像人类的请求。

urllib.request.Request(url,headers)
参数说明如下:
url:请求的URL地址。
headers:重构请求头。

response=request.urlopen('https://www.maoyan.com/board')
url = response.geturl() # 返回响应对象的URL地址 也就是上面网址
print(url)

User-Agent 即用户代理,简称“UA”,它是一个特殊字符串头;网站服务器通过识别 “UA”来确定用户所使用的操作系统版本、CPU 类型、浏览器版本等信息。而网站服务器则通过判断 UA 来给客户端发送不同的页面。

避免网站通过识别 User-Agent 来封杀爬虫程序。

模块随机获取UA: fake-useragent
pip install fake-useragent
from fake_useragent import UserAgent
#实例化一个对象
ua=UserAgent()
#随机获取一个ie浏览器ua
print(ua.ie)
#随机获取一个火狐浏览器ua
print(ua.firefox)

from urllib import request
# 定义变量:URL 与 headers
url = 'http://httpbin.org/get' #向测试网站发送请求
#重构请求头,伪装成 Windows Chrome浏览器访问
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}
# 1、创建请求对象,包装ua信息
req = request.Request(url=url,headers=headers)
# 2、发送请求,获取响应对象
res = request.urlopen(req)
# 3、提取响应内容
html = res.read().decode('utf-8')
print(html)

urllib.parse

对搜索内容如汉字,会进行编码
urlencode() 该方法实现了对 url 地址的编码操作
unquote() 该方法将编码后的 url 地址进行还原,被称为解码

#导入parse模块
from urllib import parse
#构建查询字符串字典
query_string = {
'wd' : '爬虫'
}
#调用parse模块的urlencode()进行编码
result = parse.urlencode(query_string)  ##先进行编码再爬虫
result= parse.quote(query_string ) # 或者使用quote(),只能对字符串进行编码
#使用format函数格式化字符串,拼接url地址
url = 'http://www.baidu.com/s?{}'.format(result)
print(url)

URL拼接:

# 1、字符串相加
  baseurl = 'http://www.baidu.com/s?'
  params='wd=%E7%88%AC%E8%99%AB'
  url = baseurl + params
# 2、字符串格式化(占位符)
  params='wd=%E7%88%AC%E8%99%AB'
  url = 'http://www.baidu.com/s?%s'% params
# 3、format()方法
  url = 'http://www.baidu.com/s?{}'
  params='wd=%E7%88%AC%E8%99%AB'
  url = url.format(params)

#每爬取一个页面随机休眠1-2秒钟的时间
time.sleep(random.randint(1,2))

模板

找URL的规律
https://tieba.baidu.com/f?kw=%E9%99%95%E8%A5%BF%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6&ie=utf-8&pn=0
https://tieba.baidu.com/f?kw=%E9%99%95%E8%A5%BF%E7%A7%91%E6%8A%80%E5%A4%A7%E5%AD%A6&ie=utf-8&pn=50
发现 url 具有两个查询参数,分别是 kw 和 pn,并且 pn 参数具有规律性,如下所示:

第n页:pn=(n-1)*50
#参数params
pn=(page-1)*50
params={
         'kw':name,
         'pn':str(pn)
        }

https://tieba.baidu.com/f?kw=陕西科技大学&ie=utf-8&pn=50

# 程序结构
class xxxSpider(object):
    def __init__(self):
        # 定义常用变量,比如url或计数变量等
       
    def get_html(self):
        # 获取响应内容函数,使用随机User-Agent
   
    def parse_html(self):
        # 使用正则表达式来解析页面,提取数据
   
    def write_html(self):
        # 将提取的数据按要求保存,csv、MySQL数据库等
       
    def run(self):
        # 主函数,用来控制整体逻辑
       
if __name__ == '__main__':
    # 程序开始运行时间
    spider = xxxSpider()
    spider.run()

####示例

# -*- coding:utf-8 -*-
import time
from urllib import request,parse
from fake_useragent import UserAgent

class TieBarSpider:
    def __init__(self,url,file_name):
        self.url = url
        self.file_name = file_name

    # 1.保存文件函数
    def save_html(self,html):
        with open(file_name,'w',encoding='utf-8') as f:
            f.write(html)

    def run(self):
        pn = 100
        query_string = {
            'wd': '陕西科技大学',
            'ie':'utf-8',
            'pn': '0'
        }
        # 拼接URL地址
        params = parse.urlencode(query_string)
        Whole_url = self.url.format(params)
        req = request.Request(url=Whole_url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'})
        res = request.urlopen(req)
        # windows会存在乱码问题,需要使用 gbk解码,并使用ignore忽略不能处理的字节;也可也用utf-8试一试
        # linux不会存在上述问题,可以直接使用decode('utf-8')解码
        html = res.read().decode('utf-8', "ignore")
        self.save_html(html)

if __name__ == '__main__':
    start_time = time.time()
    url = 'http://tieba.baidu.com/f?{}'
    file_name= '陕西科技大学' + '.html'
    spider = TieBarSpider(url,file_name)
    spider.run()
    end_time = time.time()
    print('执行时间:%.2f'%(end_time-start_time))



#######
# 以脚本方式启动
if __name__ == '__main__':
    #捕捉异常错误
    try:
        spider = MaoyanSpider()
        spider.run()
    except Exception as e:
        print("错误:",e)
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值