实现对任意百度贴吧的html爬取

本文介绍如何爬取HTML,以百度贴吧为例,通过设置随机浏览器UA和代理服务器来避免IP被封,讲解了代理的分类及其作用,并展示了爬虫效果。
摘要由CSDN通过智能技术生成

前言

如何爬取 HTML?就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是他的衣服。所以最重要的部分是存在于HTML中的,下面我就写个例子来扒一个网页下来

初步代码

from urllib.request import Request,urlopen
from urllib.parse import quote
#设置请求头,使用浏览器代理
def get_html(url):
    headers={
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:66.0) Gecko/20100101 Firefox/66.0"
    }
    request=Request(url,headers=headers)
    response=urlopen(request)
    return response.read().decode()
#将爬取的的数据 用html保存
def save_html(html,filename):
    with open(filename,'w',encoding='utf-8') as f:
        f.write(html)
    
def main():
    t=input("输入贴吧名字:")
    n=int(input("输入爬取的页数:"))
    name=quote(t)
    print(name)
    for x in range(n):
        url='http://tieba.baidu.com/f?kw='+quote(t)+'&ie=utf-8&pn={}'.format(x*50)
        # print(url)
        html=get_html(url)
        filename=t+'贴吧第'+str(x+1)+'页 html'
        save_html(html,filename)
   
if __name__=="__main__":
    main()

代码升级版(实现了随机浏览器UA,用代理服务器,避免源IP地址被封)
设置代理Proxy
假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它就会禁止你的访问,因此设置一些代理服务器来帮助你做工作,每隔一段时间 换一个代理,可以有效避免网站 的检测。
代理分类:
透明代理:目标网站知道你用了代理,还知道你源IP地址。无卵用
匿名代理:目标网站知道你用了代理,但不知道你的IP地址。一般
高匿代理:目标网站不知道你用代理,不知道你IP地址。很棒

from urllib.request import Request,build_opener,ProxyHandler
from urllib.parse import quote
from fake_useragent import UserAgent
import time
#设置请求头,使用随机浏览器代理,避免被服务器直接识别为电脑程序。
def get_html(url):
    headers = {
        "User-Agent": UserAgent().ie
    }
    request = Request(url, headers=headers)
    #采取代理服务器有效避免源IP地址被封
    handler = ProxyHandler({"http": "39.137.77.66:8080"})
    opener = build_opener(handler)
    response = opener.open(request)
    return (response.read().decode())


# 将爬取的的数据 用html保存
def save_html(html, filename):
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(html)

def main():
    t = input("输入贴吧名字:")
    n = int(input("输入爬取的页数:"))
    name = quote(t)
    print(name)
    for x in range(n):
        url = 'http://tieba.baidu.com/f?kw=' + quote(t) + '&ie=utf-8&pn={}'.format(x * 50)
        print(url)
        html = get_html(url)
        filename = t + '贴吧第' + str(x + 1) + '页 html'
        save_html(html, filename)
    #每次爬取停一秒,避免访问频率过高
        time.sleep(1)

if __name__ == "__main__":
    main()

效果图展示
在这里插入图片描述在这里插入图片描述

PS:欢迎补充和指正

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值