笔趣阁爬虫

笔趣阁爬虫
新手练习,欢迎大佬指正,因为还没学习多线程和多进程所以爬取的速度会比较慢,主要我设置了每隔2s访问一次(为了防止被封ip),如果觉得慢的话可以考虑删掉time.sleep(2)这一行代码

import requests
import re
from bs4 import BeautifulSoup
from fake_useragent import UserAgent
import time

# url = "http://www.biquge.info/10_10229/"
#输入要下载书的链接
url = input('请输入要下载书的笔趣阁链接:')
# 使用虚假身份
ua = UserAgent().random
#正则模板,找到每一章对应的链接
findurl = re.compile(r'<dd><a href="(.*?)" title="(.*?)">(.*?)</a></dd>')
#正则模板,找到每一章对应的内容
findbase = re.compile(r'<meta content="(.*?)" property="og:novel:read_url"/>')
#正则模块,找到书名
findbook_name = re.compile(r'<meta content="(.*?)" property="og:title"/>')
#定义一个空的列表用来存放每一章对应的链接
urllist = []
#访问该书的网页并解析
def askurl_1(url):
    head = {
        'User-Agent': ua
    }
    time.sleep(2)
    res = requests.get(url, head)
    html = res.content.decode('utf-8')
    soup = BeautifulSoup(html, 'lxml')
    list = re.findall(findurl,str(soup))
    baseurl = re.findall(findbase,str(soup))
    book_name = re.findall(findbook_name,str(soup))
    book_name = book_name[0]
    for url in list:
        urllist.append(baseurl[0] + url[0]) #此处因为找到的链接只有一半,所以需要拼接
    return book_name,urllist

#访问每一章对应的网页并解析
def askurl_2(url):
    head = {
        'User-Agent':ua
    }
    time.sleep(2)
    res = requests.get(url,head)
    html = res.content.decode('utf-8')
    soup = BeautifulSoup(html,'lxml')
    post_content = soup.find('div',id = "content")
    title = soup.find('h1').text#章节的标题
    content = post_content.text#章节的内容
    return title,content
#保存文件,默认是保存到python文件所在的目录
def save(book_name,title,content ):
    book_name = str(book_name)
    fp = open("./%s.txt"%book_name,'ab')
    fp.write(title.encode('utf-8'))
    fp.write(content.encode('utf-8'))
    fp.close()
#主函数
def main():
    book_name,urllist = askurl_1(url)
    j = 1
    print(f'该书共有{len(urllist)}章,请耐心等待')
    for i in urllist:#把列表里面的章节链接提取出来
        title, content = askurl_2(i)
        save(book_name, title, content)
        print('第%d章下载完成' % j)
        j += 1
    print('下载完毕,感谢使用')


main()#调用主函数

### 关于爬虫抓取小说网站的方法 为了实现数据采集并从网站获取所需的小说内容,可以采用 Python 编写的无头浏览器技术来完成这一任务。以下是具体的技术细节以及其实现方式。 #### 技术选型 在实际操作中,通常会选用 Selenium 或 Playwright 这样的工具配合无头浏览器运行环境来进行动态网页的数据提取工作[^1]。这些工具能够模拟真实用户的浏览行为,从而绕过一些反爬机制。 对于静态页面部分,则可以直接通过 `requests` 和 `BeautifulSoup` 来解析 HTML 结构中的信息;而对于 JavaScript 渲染的内容,则需要用到上述提到的自动化测试框架之一——Selenium 或者更高效的 Playwright 库[^2]。 #### 主要依赖库介绍 - **Requests**: 用于发送 HTTP 请求的基础模块。 - **Beautiful Soup (bs4)**: 提供了一种简单的方式来查找和处理HTML文档节点树结构。 - **Selenium / Playwright**: 支持驱动真正的Web浏览器实例执行脚本化交互动作,特别适合应对AJAX加载或者JavaScript重写DOM场景下的复杂情况。 #### 完整代码示例 下面给出一段基于Playwright 的简化版爬虫程序作为参考: ```python from playwright.sync_api import sync_playwright def main(): with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() url = 'https://www.example.com' # 替换为目标站点URL try: page.goto(url, timeout=60000) # 设置超时时间为60秒 content = page.content() print(content[:50]) # 打印前五十字符验证是否成功访问到目标网址 except Exception as e: print(f"Error occurred while fetching data {e}") finally: browser.close() if __name__ == '__main__': main() ``` 此段代码展示了如何启动一个 Chromium 浏览器进程,并打开指定 URL 后读取整个页面源码的过程。需要注意的是,在正式项目开发之前,请务必确认自己已经阅读并理解了目标网站的服务条款,确保您的活动符合其规定范围之内。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值