• python爬取糗百段子


    (1)目标网站为:https://www.qiushibaike.com/text/

    (2)爬取目标网站10页内容

    (3)爬取内容包括:作者和内容

    (4)保存在字典中,格式如下:

    {

        1:{   '作者':'。。。',

            '内容':'。。。。。。',

        }

        ……

    }

    (5)将内容转换为JSON保存在文本中

    1,首先对网页url进行分析确定前10页的url.

    2,引用   requests   bs4  json库。

    3,写主函数 主函数下面有 请求url的函数 将 内容 作为参数交给 bs4 做处理(需要确定网页标签) 得到最终数据  做持久化保存。

    import requests
    from bs4 import BeautifulSoup as BS
    import json

    headers={
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36"
    }
    #ua伪装
    text='https://www.qiushibaike.com/text'
    count_num=1


    def get_html(url):
    html=requests.get(url,headers=headers)
    #请求url
    return html.text
    #返回整页的数据,请求多少页返回多少页的数据。

    def bs_html(text_content,content_dict):
    global count_num
    soup=BS(text_content,'html.parser')
    #是要bs库里面的html.parser方法对text_content进行排序(text_content就是爬取的页面的html)
    soup_list=soup.select('#content .article ')
    #使用bs里的select这个方法找到页面里面标签。

    for item in soup_list:
    #循环这个整体标签(这是整个页面,我们需要里面的某些数据)
    biaoti=item.select_one('.author a h2')
    #item作为临时变量,每循环一次都要在里面提取出整体标签下的 h2 标签,这个就是标题,赋值给前面biaoti这个变量
    if biaoti:
    biaoti = biaoti.text.strip()

    else:
    biaoti='匿名用户'
    content=item.select_one('a .content span').text.strip()
    #整体标签下的内容也是上述方法,提取出来
    content_dict[count_num]={'作者':biaoti,'内容':content}
    #使用这个空字典 前面加上计数器 后面是字典形式 每循环一次对应的计数+1
    count_num += 1
    return content_dict
    #返回整个字典

    def save_text(text_list):
    #保存文件函数
    with open('rut.txt','w',encoding='utf8')as f:
    #这个文件不存在 以写的方式打开就自动创建 起个别名f
    f.write(text_list)
    #对f进行保存 保存处理后的字典
    f.close()
    #保存后关闭文件



    def main(num):
    content_dict={}
    #定义空字典
    for i in range(1,num+1):
    #循环次数 num是形参
    url=text+'/page{}/'.format(i)
    #最终的url 对初始的url进行拼接 ,最终得到10页子url
    text_content=get_html(url)
    #对url请求,返回的数据赋值给 text_content这个变量,作为bs函数的参数。
    text_list=bs_html(text_content,content_dict)
    #bs函数对整体的网页数据,空字典进行处理,当作两个参数放进去,上面bs函数处理好后返回整个字典,赋值给text_list这个变量
    save_text(json.dumps(text_list,ensure_ascii=False))
    #对数据保存前还要进行处理,参数是bs处理后的字典 去掉ascii这个编码格式,保存时使用utf8格式



    if __name__ == '__main__':
    main(10)
  • 相关阅读:
    算法
    什么叫「人的格局」?是否有必要培养大的格局或怎么培养?
    套接字
    信号量 P V测试详解
    Emacs快速入门
    Emacs 从入门到精通
    Linux多进程之间的文件锁
    mysql 登录报错:ERROR 1045 (28000)
    类职责协作模型
    .Netcore使用Session
  • 原文地址:https://www.cnblogs.com/sc66/p/12900516.html
Copyright © 2020-2023  润新知