VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • 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)

相关教程