现如今,我想每一个人都会需要从互联网上获取资料,这篇文章抛砖引玉,谈谈自己的方式。要理解本文所有内容,需要你掌握一定的技术水平。至少需要具备 HTML 与 Python 的基础知识。一旦你掌握了,即可触类旁通,利用这些知识解决你工作时些许问题。下面就正式开始吧,所有代码均有注释。
本文用到了一些第三方库,分别是利用 requests
获取网页内容,利用 BeatifulSoup
清洗内容,利用 Click
构建命令行工具。当然,要用这些第三方库首先要安装一下。安装命令如下:
pip install click pip install requests pip install beautifulsoup4
安装好了之后,就可以引入这些库,接着就开始愉快的编写代码了。这里以爬取百度文档内容为例讲解。
import click import requests from bs4 import BeautifulSoup # 请求头 headers = {"User-agent": "Baiduspider"} def get_html_content(url: str) -> str: """获取网页中的内容 Parameters ---------- url : str 网页链接 Returns ------- str 返回网页内容,此时内容包含 HTML 标签等信息 """ # 通过网页链接获取内容有概率会出现问题,因此这里使用 try 试着获取内容,如果页面链接有错将会报错误 try: # raw_html 为请求之后返回的所有内容,即整个网页源代码 raw_html = requests.get(url, headers=headers, timeout=30) # 查看访问是否有错误,如果有将会报错,并终止代码执行 raw_html.raise_for_status() raw_html.encoding = raw_html.apparent_encoding # 没有错误则返回网页内容 return raw_html.text except: # 如果出现错误,返回空字符串 raise ValueError("发生错误!") def parse_paragraph_content(raw_html: str) -> list: # 从获取的内容中提取出段落,并作为列表返回 if not raw_html: raise ValueError("内容为空,没有获取到任何内容!") # 定义一个列表用于接收清洗之后的内容。 p_list = [] # 利用标准库中的解析器解析内容,你也可以使用 html5lib 作为解析器。 soup = BeautifulSoup(raw_html, "html.parser") # 添加标题到列表中 p_list.append(soup.title.string) # 循环出网页内容中指定标签属性下面的所有内容 # 如果你需要爬取其他网页的内容,只要改下面这行代码应该就可以了。 for div in soup.find_all("div", attrs={"class": "bd doc-reader"}): # 将内容添加当列表的后面 print(div.get_text()) p_list.extend(div.get_text().split("\n")) # 清除掉列表中的空白内容 p_list = [c for c in p_list if str(c).strip() != ""] # 清洗内容所有的换页符,在 Python 中 "\f" 相当于 "\x0c" p_list = [c.replace("\x0c", "") for c in p_list] return p_list def create_doc_file(p_list: list, path: str = "document.txt") -> None: """创建文档 Parameters ---------- p_list : list 接收 parse_paragraph_content 函数中清洗之后的数据 path : str, optional 文档路径, by default "document.txt" """ with open(path, "w", encoding="utf-8") as file: for str in p_list: file.write(str) file.write("\n") @click.command() @click.option("--url", prompt="文档链接", help="输入百度文库链接!") @click.option("--path", default="document.txt", help="文档名") def main(url: str, path: str) -> None: # 利用命令行的方式执行代码 raw_html = get_html_content(url) p_list = parse_paragraph_content(raw_html) create_doc_file(p_list, path) if __name__ == "__main__": main()
声明:本文所叙述的所有内容,仅作为学习,不可用于商业及违法行为。后果自负。
看看效果。欢迎点赞,转发。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)