0

    超详细的python爬虫案例,一次爬取上百篇文章

    2023.05.02 | admin | 126次围观

    一次爬多篇文章,逻辑是先从主网址爬到每篇文章的网址静态网页的爬取思路,再从各个网址处爬取文章,很简单的静态网页爬取,不需考虑反扒问题。话不多说,直接案例说话。

    实例:从 ,爬取小说的全部章节的内容。

    图1

    实现方法:requests 访问 + BeautifulSoup解析

    1、目标网址是静态网页,浏览网址和数据网址相同,可直接使用。

    import requests                           # 导入requests库
    from bs4 import BeautifulSoup  # 导入BeautifulSoup库
    url = ''https://www.biquge.com.cn/book/23341/''  # 准备好目标网址
    

    2、requests 访问网址获得网页

    打开浏览器控制台,查看Network下的Response发现有我们需要用的章节的标题和链接,用requests访问网址,就是为了获取下图中response界面下红框的内容。

    图2

    requests 访问网址代码:

    import requests
    from bs4 import BeautifulSoup
    url = ''https://www.biquge.com.cn/book/23341/''
    response= requests.get(url)                           #  requests访问网址,获得的内容放入response
    

    获得的内容放入response变量(自定义,可随意取)里。

    3、BeautifulSoup解析网页获得内容

    用BeautifulSoup解析response变量里的内容,方法为:

    import requests
    from bs4 import BeautifulSoup
    url = ''https://www.biquge.com.cn/book/23341/''
    response= requests.get(url)
    soup = BeautifulSoup(response.content, 'lxml')    #  BeautifulSoup解析response里的内容,放入soup里
    

    现在网页内容已经被赋值到变量soup了,此时若打印s,会得到上面图2红框的内容。

    4、解析内容爬取小说名,并用其创建一个文件夹,以备放后面下载的小说正文

    通过在response里查找,我们发现标题在图3如下位置有出现:

    图3

    booktitle = soup.find('h1').text
    if not os.path.isdir(booktitle):  # 判断当前文件夹下是否存在和小说名同名的文件夹
        os.makedirs(booktitle)  # 若不存在,则创建小说同名文件夹
    

    图4,爬取小说名

    5、继续用BeautifulSoup解析soup内容,获得章节标题及网址

    继续在图2response里查找,发现章节信息都在dd标签下的a标签里,如图5:

    编辑切换为居中

    添加图片注释,不超过 140 字(可选)

    图5

    提取章节标题和链接代码:

    import requests
    from bs4 import BeautifulSoup
    ......
    ......
    dd = soup.find_all('dd')
    for i in range(len(dd)):
            title = dd[i].find('a').text    #  获得章节名
            chap_url = dd[i].find('a')['href']    #  获得章节链接
    				print(title, ': ", chap_url)    # 临时打印查看效果如下图
    

    图6

    5、循环遍历访问章节链接,获得小说正文

    超详细的python爬虫案例,一次爬取上百篇文章

    通过上面的操作,我们获得了每一章节页面的具体网址链接,继续用requests访问链接,就能获得小说的网页页面,接着用BeautifulSoup解析获得小说内容。我们可用简单方法,快速找到小说内容所在位置:在小说页面正文区域右键单击,选择“检查”或“审查元素”,会自动弹出浏览器控制台并高亮显示的正文在网页页面里的位置,分析确定提取参数即可。

    图7

    自动高亮显示位置

    通过上面的操作静态网页的爬取思路,我们能轻松的找到小说文本在网页里的位置,并能知道两个参数,标签:‘div’;id:‘content’,然后通过这两个参数提取出小说文本。

    import requests
    from bs4 import BeautifulSoup
    ......
    ......
    for i in range(len(dd)):
        if i == 2:    #  临时设置只看第3篇文章的打印效果,用于调试
            title = dd[i].find('a').text
            chap_url = dd[i].find('a')['href']
            response1 = requests.get('https://www.biquge.com.cn' + chap_url) #访问链接
            soup1 = BeautifulSoup(response1.content, 'lxml')   # 获得网页
            text = soup1.find('div', id='content').text   #解析网页获得小说正文
            print(text)      # 试打印看效果
    

    图8,打印第3篇正文成功

    6、保存结果

    f = open(path + '/' + title + '.txt', 'a+', encoding='utf-8')  # 设置章节标题为文件名
            f.write(text)  # 写入小说正文
    

    至此,代码完成,能放心下载了。

    7、运行效果

    我们在完整代码里,设置一次性下载100章节的代码,来看看下载的效果。完整代码:

    import requests, os
    from bs4 import BeautifulSoup
    url = 'https://www.biquge.com.cn/book/23341/'
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'lxml') 
    booktitle = soup.find('h1').text
    if not os.path.isdir(booktitle):  # 判断当前文件夹下是否存在和小说名同名的文件夹
        os.makedirs(booktitle)  # 若不存在,则创建小说同名文件夹
    dd = soup.find_all('dd')
    for i in range(len(dd)):
        if i < 100:
            title = dd[i].find('a').text
            chap_url = dd[i].find('a')['href']
            response1 = requests.get('https://www.biquge.com.cn' + chap_url)
            soup1 = BeautifulSoup(response1.content, 'lxml')
            text = soup1.find('div', id='content').text
            f = open(booktitle + '/' + title + '.txt', 'a+', encoding='utf-8')
            f.write(text)
            print("正在下载《 {} 》...... {} / {} ".format(title, i+1, len(dd)))
        else:
            break
    print('本次共下载 {} 章, 保存地址:{}'.format(i, os.getcwd() + '\\' + booktitle + '\\'))
    

    运行效果:

    0经验0基础,怎样学技术赚钱?

    学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。

    python兼职资源+python全套学习资料)

    一、Python所有方向的学习路线

    Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

    二、Python必备开发工具

    三、Python视频合集

    观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

    四、实战案例

    光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

    五、Python练习题

    检查学习结果。

    最后,千万别辜负自己当时开始的一腔热血,一起变强大变优秀。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论