Python网络爬虫步骤是什么?新手小白必看 !

本文详细介绍了在Windows7系统和Python3.9环境下,使用Python进行网络爬虫的完整步骤,包括准备BeautifulSoup库、编写爬虫调度程序、url管理器、网页下载器、解析器和输出器的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python网络爬虫步骤:首先准备所需库,编写爬虫调度程序;然后编写url管理器,并编写网页下载器;接着编写网页解析器;最后编写网页输出器即可。

python网络爬虫步骤是什么

本教程操作环境:windows7系统、python3.9版,DELL G3电脑。

文末领取全套Python爬虫学习资源

python网络爬虫步骤

(1)准备所需库

我们需要准备一款名为BeautifulSoup(网页解析)的开源库,用于对下载的网页进行解析,我们是用的是PyCharm编译环境所以可以直接下载该开源库。

步骤如下:

选择File->Settings

img

打开Project:PythonProject下的Project interpreter

img

点击加号添加新的库

img

输入bs4选择bs4点击Install Packge进行下载

img

(2)编写爬虫调度程序

这里的bike_spider是项目名称引入的四个类分别对应下面的四段代码url管理器,url下载器,url解析器,url输出器。

# 爬虫调度程序
from bike_spider import url_manager, html_downloader, html_parser, html_outputer


# 爬虫初始化
class SpiderMain(object):
    def __init__(self):
        self.urls = url_manager.UrlManager()
        self.downloader = html_downloader.HtmlDownloader()
        self.parser = html_parser.HtmlParser()
        self.outputer = html_outputer.HtmlOutputer()

    def craw(self, my_root_url):
        count = 1
        self.urls.add_new_url(my_root_url)
        while self.urls.has_new_url():
            try:
                new_url = self.urls.get_new_url()
                print("craw %d : %s" % (count, new_url))
                # 下载网页
                html_cont = self.downloader.download(new_url)
                # 解析网页
                new_urls, new_data = self.parser.parse(new_url, html_cont)
                self.urls.add_new_urls(new_urls)
                # 网页输出器收集数据
                self.outputer.collect_data(new_data)
                if count == 10:
                    break
                count += 1
            except:
                print("craw failed")

        self.outputer.output_html()


if __name__ == "__main__":
    root_url = "http://baike.baidu.com/item/Python/407313"
    obj_spider = SpiderMain()
    obj_spider.craw(root_url)

(3)编写url管理器

我们把已经爬取过的url和未爬取的url分开存放以便我们不会重复爬取某些已经爬取过的网页。

# url管理器
class UrlManager(object):
    def __init__(self):
        self.new_urls = set()
        self.old_urls = set()

    def add_new_url(self, url):
        if url is None:
            return
        if url not in self.new_urls and url not in self.old_urls:
            self.new_urls.add(url)

    def add_new_urls(self, urls):
        if urls is None or len(urls) == 0:
            return
        for url in urls:
            self.new_urls.add(url)

    def get_new_url(self):
        # pop方法会帮我们获取一个url并且移除它
        new_url = self.new_urls.pop()
        self.old_urls.add(new_url)
        return new_url

    def has_new_url(self):
        return len(self.new_urls) != 0

(4)编写网页下载器

通过网络请求来下载页面

# 网页下载器
import urllib.request


class HtmlDownloader(object):

    def download(self, url):
        if url is None:
            return None
        response = urllib.request.urlopen(url)
        # code不为200则请求失败
        if response.getcode() != 200:
            return None
        return response.read()

(5)编写网页解析器

对网页进行解析时我们需要知道我们要查询的内容都有哪些特征,我们可以打开一个网页点击右键审查元素来了解我们所查内容的共同之处。

# 网页解析器
import re
from bs4 import BeautifulSoup
from urllib.parse import urljoin


class HtmlParser(object):

    def parse(self, page_url, html_cont):
        if page_url is None or html_cont is None:
            return
        soup = BeautifulSoup(html_cont, "html.parser", from_encoding="utf-8")
        new_urls = self._get_new_urls(page_url, soup)
        new_data = self._get_new_data(page_url, soup)
        return new_urls, new_data

    def _get_new_data(self, page_url, soup):
        res_data = {"url": page_url}
        # 获取标题
        title_node = soup.find("dd", class_="lemmaWgt-lemmaTitle-title").find("h1")
        res_data["title"] = title_node.get_text()
        summary_node = soup.find("p", class_="lemma-summary")
        res_data["summary"] = summary_node.get_text()
        return res_data

    def _get_new_urls(self, page_url, soup):
        new_urls = set()
        # 查找出所有符合下列条件的url
        links = soup.find_all("a", href=re.compile(r"/item/"))
        for link in links:
            new_url = link['href']
            # 获取到的url不完整,学要拼接
            new_full_url = urljoin(page_url, new_url)
            new_urls.add(new_full_url)
        return new_urls

(6)编写网页输出器

输出的格式有很多种,我们选择以html的形式输出,这样我们可以的到一个html页面。

# 网页输出器
class HtmlOutputer(object):

    def __init__(self):
        self.datas = []

    def collect_data(self, data):
        if data is None:
            return
        self.datas.append(data)

    # 我们以html表格形式进行输出
    def output_html(self):
        fout = open("output.html", "w", encoding='utf-8')
        fout.write("<html>")
        fout.write("<meta charset='utf-8'>")
        fout.write("<body>")
        # 以表格输出
        fout.write("<table>")
        for data in self.datas:
            # 一行
            fout.write("<tr>")
            # 每个单元行的内容
            fout.write("<td>%s</td>" % data["url"])
            fout.write("<td>%s</td>" % data["title"])
            fout.write("<td>%s</td>" % data["summary"])
            fout.write("</tr>")
        fout.write("</table>")
        fout.write("</body>")
        fout.write("</html>")
        # 输出完毕后一定要关闭输出器
        fout.close()

以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!

Python经验分享

学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。但要学会 Python 还是要有一个学习规划,这样才能学的更快更稳,最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

小编为对Python感兴趣的小伙伴准备了以下籽料 !

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑培训的!

  • 学习时间相对较短,学习内容更全面更集中
  • 可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!

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

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

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

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

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)

我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】

*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !

<think>好的,用户正在寻找Python入门的学习资源和指南,我需要根据之前的引用内容来组织回答。首先,我应该回顾用户提供的引用内容,看看有哪些可以直接使用的信息。引用[1]提到学习路线分为四个步骤:基本语法、标准库、第三方库、实践项目,这可以作为结构的基础。引用[2]和[3]则提供了具体的教程和学习技巧,比如详细的入门教程和会的教程。引用[4]虽然主要讲机器学习,但里面提到的工具包如NumPy、Pandas和Anaconda环境搭建对新手也很重要,可能需要提及。 接下来,用户需要新手指南,所以应该分步骤讲解,每个步骤给出资源和学习方法。例如,第一步学习基本语法,可以推荐官方文档和在线教程,同时结合引用[2]中的例子,比如编写折扣计算程序。第二步标准库,可以提到学习哪些常用库,如os、datetime,并引用[1]中的标准库学习部分。 然后,第三方库部分可以引用[4]中的工具包,比如NumPy和Pandas,但也要考虑到新手入门库,比如requests或BeautifulSoup。实践项目部分需要推荐适合初学者的项目,引用[3]中的实战项目建议,如爬虫或数据分析。 学习资源方面,引用[2]提到的详细教程和引用[3]的会教程可以作为推荐资源,同时要加入书籍和社区,比如《Python编程:从入门到实践》和Stack Overflow。学习技巧部分,引用[1]和[3]都提到了制定计划和实践,需要强调这些点。 最后,生成相关问题时要围绕用户可能的后续需求,比如如何选择版本、推荐书籍、练习项目、常见错误等。确保问题覆盖用户可能遇到的下一步问题,帮助他们深入学习。 需要检查是否符合系统级指令,比如数学公式是否正确使用,但用户的问题不涉及数学,可能不需要处理。回答结构要清晰,分步骤和模块,使用引用内容自然融入,并在末尾添加引用标识。确保语言口语化,避免使用Markdown格式,段落间用空行分隔。</think>根据您寻找Python入门学习资源的需求,我将结合主流学习路径和优质资源为您梳理学习框架: ### 一、Python入门学习路径 1. **基础语法阶段(1-2周)** - 掌握变量定义、数据类型(字符串/列表/字典等) - 学习流程控制(条件判断/循环语句) - 理解函数定义与模块化编程 - *推荐资源*:官方文档[《Python Tutorial》](https://docs.python.org/3/tutorial/)[^2]、菜鸟教程Python基础篇 2. **标准库应用(2-3周)** - 文件操作(`os`/`shutil`模块) - 时间处理(`datetime`模块) - 正则表达式(`re`模块) - *实践案例*:用`csv`模块处理表格数据[^1] 3. **第三方库实践(3-4周)** - 数据分析:`Pandas`基础操作 - 可视化:`Matplotlib`绘图 - 网络请求:`requests`库 - *经典项目*:用`BeautifulSoup`实现网页数据抓取[^3] 4. **项目实战(持续阶段)** - 开发计算器/待办事项应用 - 爬取天气数据并可视化 - 参与GitHub开源项目 - *技巧提示*:从50行代码以内的小项目起步[^3] ### 二、精选学习资源 | 资源类型 | 推荐内容 | 特点 | |---------|----------|------| | **在线教程** | 廖雪峰Python教程 | 中文社区公认优质教程[^2] | | **视频课程** | B站《零基础入门学习Python》 | 小甲鱼系列适合零基础 | | **书籍** | 《Python编程:从入门到实践》 | 项目驱动型教材[^1] | | **开发工具** | VS Code + Python插件 | 智能提示/调试支持[^4] | | **练习平台** | LeetCode新手题库 | 算法与语法双提升 | ### 三、关键学习技巧 1. **环境配置**:通过Anaconda管理Python环境,避免版本冲突问题[^4] 2. **代码规范**:初期养成PEP8编码习惯,使用`autopep8`插件自动格式化 3. **调试方法**:掌握`pdb`调试器基础命令(break/step/continue) 4. **效率工具**:Jupyter Notebook快速验证代码片段[^4] ### 四、典型误区规避 1. 避免过早接触机器学习等复杂领域(引用[4]中的高阶内容需有基础再学) 2. 不要盲目追求最新版本,建议使用Python 3.8+稳定版本[^4] 3. 拒绝"复制粘贴式学习",务手动敲写代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值