Python爬取小说(7)

182 阅读3分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

前面说到,爬虫的步骤

1.定位位置目标;2.下载网页;3.设置速度,找到目标文件;4.找到目标文件;5.下载目标文件;6.提取关键数据

这次就不一步步的说了。今天来爬取以下凡人修仙传,首先打开网页www.ibswtan.com/17/17023/

image.png

啥也别管,先把网页下载下来看看。用requests模块

import requests
import bs4
import os
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
           'cookie': 'BIDUPSID=45588421F978DE2902A1A47464D72AB3; PSTM=1609986056; BAIDUID=45588421F978DE29E3D21BB7BB5A6873:FG=1; REALTIME_TRANS_SWITCH=1; FANYI_WORD_SWITCH=1; HISTORY_SWITCH=1; SOUND_SPD_SWITCH=1; SOUND_PREFER_SWITCH=1; __yjs_duid=1_e3607a56e43709e2ca3db4147c46396a1612784778582; BAIDUID_BFESS=45588421F978DE29E3D21BB7BB5A6873:FG=1; Hm_lvt_64ecd82404c51e03dc91cb9e8c025574=1614696427; Hm_lpvt_64ecd82404c51e03dc91cb9e8c025574=1614697139; __yjsv5_shitong=1.0_7_253e552513b2cf371866473b2e57fb4e5137_300_1614697145680_59.50.85.17_fe15699c; ab_sr=1.0.0_ZDRiZDU1NjAzNjRkMDUyOWE3ZTg3MWZlMjRhMGE4NzkwYmI3N2ExMzliMjY3MjIxOGIyY2EyMmMxNWQzOWFmY2UyZDZjMGFkYzVjNWZkNGQ1ZWIxMTJmYjZjM2Y0M2M2'
           }
url_start = 'https://www.ibswtan.com/17/17023/' #凡人修仙传

不难发现,里面有章节选择,咱们选择第一章就好了。当然,我们可以建立一个书签

image.png

#创建书签
if '书签.txt' not in os.listdir():
    with  open('书签.txt','w') as f:
        f.write('1146042.html') #第一章

end = ''
while end!='q':
    with  open('书签.txt','r') as f:
        now = f.read()
    url = url_start+now
    res =  requests.get(url=url,headers = headers)
    res.encoding="utf-8" #解码不行就gbk
    soup = bs4.BeautifulSoup(res.text, "html.parser")
    title = soup.find_all('h1')
    print(f"==========   {title[0].text}   =============")
    targets = soup.find_all("div", id="content")[0]
    for i in targets:
        if str(i) != '<br/>' and str(i) != '\n':
            print(i)
            end = input() #回车下一行,输入q结束,我喜欢一行一行读
            if end == 'q':
                break
    if end == 'q':
        break
    next_ = soup.find_all('a',text='下一章')
    with  open('书签.txt','w') as f:
        f.write(str(next_[1]).split('"')[1])
    end = input('回车下一章')

上方的一段循环里面,为了方便阅读,我们放进这一循环,当阅读完后就直接按ENTER键到下一页,这样摸鱼的时候也方便的很。

for i in targets:
        if str(i) != '<br/>' and str(i) != '\n':
            print(i)
            end = input() #回车下一行,输入q结束,我喜欢一行一行读
            if end == 'q':
                break
    if end == 'q':
        break

最后效果如下,当然我们还能设置一些字体的大小或者别的,如果实在嫌麻烦,可以打开pycharm 随便调:

image.png

小说网站的反爬并不多,所以做起来还是简单的。其实HTTP代理在爬虫中也起着非常重要的作用。众所周知,在大多数情况下,在爬虫爬行的过程中,我们很可能会遇到当前ip地址不可用或有ip限制的情况。这个时候,我们经常为ip头疼。当然,代理服务器被允许使用大量的假冒ip地址,这一方面可以满足ip号码的需求,另一方面也减少了ip资源的浪费。