• spider_object_01使用正则爬取百度贴吧所有内容保存成html


    """
    本案例不涉及数据提取,
    仅指导 网页分页爬取的两种方式 思路

    第一种:利用while Ture,传参,然后在设定一个判断条件,案例中用的是如果找不到下一页,循环退出(可用于异步刷新网站)
    第二种:利用while Ture不断循环, 获取下一页url,获取不到,循环退出。 优化了异常处理。当输入的贴吧名称有误时,程序重新运行
    """
    import requests
    from fake_useragent import FakeUserAgent
    import time
    import random
    import re

    # 第一种,定义一个url
    def f1():
    num = 1
    kw=input("请输入贴吧名称>>")
    pn=0
    # 获取网页
    # 定义一个url
    # 不断运行代码
    while True:
    base_url ="http://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}"
    userAgent = FakeUserAgent().random
    headers = {"User-Agent":userAgent}
    htmlStr = requests.get(url=base_url.format(kw,pn),headers=headers).text

    """
    对网页进行处理,不影响提取内容,
    只影响页面显示,在这里主要是想把replace
    这个函数练习一下(替换内容,用来处理字符串)
    支持链式规则
    """
    htmlStr=htmlStr.replace('-->','').replace('-->','')
    # print(htmlStr)
    # 进行保存
    with open(r'./baidutieba/百度贴吧第%s页.html'%num,'w',encoding='utf-8') as f:
    f.write(htmlStr)
    print('主人,运行状态良好,正在保存第%s页'%num)
    if htmlStr.find('class="next pagination-item " >') == -1:
    break

    # 设置延迟时间
    time.sleep(1.5)

    #运行一次,url的参数改变一次
    num+=1
    pn+=50


    # 第二种
    def f2():
    num = 1
    kw = input(">>请输入贴吧名称:")
    # 定义一个初始url
    url = 'http://tieba.baidu.com/f?kw={}&ie=utf-8&pn=0'.format(kw)
    # 随机user-agent
    while True:
    userAgent = FakeUserAgent().random
    headers = {"User-Agent": userAgent}
    # 获取到html网页(字符串)
    htmlStr = requests.get(url, headers=headers).text

    # 保存
    with open(r'./baidutieba/百度贴吧第%s页.html' % num, 'w', encoding='utf-8') as f:
    f.write(htmlStr)
    print("正在保存第%s页"%num)
    try:
    # 获取到下一页的url
    result = re.findall(r'<a href="(.*?)" class="next pagination-item " >', htmlStr)
    print(result[0])
    print(type(result[0]))
    if result:
    url = 'http:'+ result[0]
    else:
    break
    # 设置延时时间
    time.sleep(1.5)
    num += 1
    except Exception as e:
    print(e,"输入贴吧名称有误")
    f2()

    if __name__ == '__main__':
    # f1()
    f2()
    人生苦短,我用python!
  • 相关阅读:
    LeetCode解题报告—— Permutations & Permutations II & Rotate Image
    LeetCode解题报告—— Combination Sum & Combination Sum II & Multiply Strings
    LeetCode解题报告—— Search in Rotated Sorted Array & Search for a Range & Valid Sudoku
    顺利通过EMC试验(2)
    CSS复合选择器
    Emmet快速生成HTML和CSS
    Spring 三种创建Bean的方式
    Spring BeanFactory和ApplicationContext的区别
    Spring ApplicationContext的三个实现类详解
    CSS的引入方式
  • 原文地址:https://www.cnblogs.com/YangQingHong/p/10996755.html
Copyright © 2020-2023  润新知