lab02: 爬七猫一部小说

2022-10-27  本文已影响0人  水水壶

爬这个七猫小说,只能爬到19章,后面的是需要会员的没有办法爬,问题就是我爬完第一章之后要爬第二张,那我的爬的网址需要变,我开始分析第一章网址(https://www.qimao.com/shuku/222767-16480917400001/)和第二章网址(https://www.qimao.com/shuku/222767-16480917400002/)的规律,发现就是后面的数字加1,第三章、第四章也是符合这个规律,所以我写了一个循当第一章爬完之后就 把后面这个数16480917400001+1,前五章都可以顺利爬下来,到第六章就报错了,从第六章就不是按着这个规律来的了。最后我是先爬第一章找到页面下一章的位置,然后获取 a 标签 href 属性的链接,就是下一章的链接.

# lab02: 爬一整部小说(https://www.qimao.com/reader/index/1648167/)
# 问题: 小说阅读页面点右键不显示"检查"
# 解决方案:在浏览器窗口的右上方选择Chrome菜单, 然后选择工具 > 开发者工具

# 先把源代码
# 找到小说段落,存储段落
# 判断是否有下一章,有 点击下一页,爬取下一页源代码,

import requests
from bs4 import BeautifulSoup


def fetch_data(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
    }
    original_data = requests.get(url, headers=headers)
    with open('lab02.html', 'w') as f:
        f.write(original_data.text)


def parse_data():
    with open('lab02.html') as f:
        original_data = f.read()
        article_soup = BeautifulSoup(original_data, 'html.parser')
        article = article_soup.find("div", attrs={"class": "chapter-detail-article" })
        next_page = article_soup.find("a", attrs={"class": "qm-btn inline-block important large"})
    return [article, next_page]


def handle_data():
    print('111')
    resp = parse_data()
    print(resp)
    with open('lab02.csv', 'a') as f:
        f.write(resp[0].text)
        f.write('\n')
        page_link = resp[1]['href']
        print('链接:{}:'.format(page_link))
    return page_link


if __name__ == '__main__':
    page_link = '/shuku/1648167-16517458210001/'
    while True:
        url = 'https://www.qimao.com{}'.format(page_link)
        fetch_data(url)
        parse_data()
        page_link = handle_data()
        print(page_link)
        if page_link == None:
            break


上一篇下一篇

猜你喜欢

热点阅读