• Python爬虫程序网络请求及内容解析


    目录

    引言

    一、网络请求

    1. 导入必要的库

    2. 发送请求

    3. 处理响应

    二、内容解析

    1. HTML解析

    2. 查找特定元素

    3. 查找多个元素

    4. 使用选择器选择元素

    、应用示例:爬取网站文章并解析标题和内容

    1. 发送请求并解析HTML内容

    2. 查找文章元素并提取标题和内容

    3. 进一步处理数据或存储结果

    4. 注意爬虫程序的合法性和道德问题

    总结


    引言

    随着互联网的快速发展,网络爬虫程序已经成为数据获取的重要手段。Python作为一种功能强大的编程语言,在爬虫领域中有着广泛的应用。本文将介绍Python爬虫程序的网络请求和内容解析过程,并通过实例说明如何使用Python进行网络爬虫编程。

    一、网络请求

    1. 导入必要的库

    在Python中,网络请求通常使用requests库实现。此外,我们还需要导入BeautifulSoup库进行HTML内容的解析。

    1. import requests  
    2. from bs4 import BeautifulSoup

    2. 发送请求

    使用requests.get()函数发送HTTP GET请求。可以通过传递URL参数来指定请求的目标。

    1. url = 'http://example.com'  
    2. response = requests.get(url)

    3. 处理响应

    如果请求成功,response对象将包含服务器返回的响应内容。我们可以使用text属性获取响应的文本内容。

    1. if response.status_code == 200:  
    2.     content = response.text  
    3. else:  
    4.     content = None

    二、内容解析

    1. HTML解析

    对于获取的HTML内容,我们可以使用BeautifulSoup库进行解析。以下是一个简单的示例:

    soup = BeautifulSoup(content, 'html.parser')

    2. 查找特定元素

    使用BeautifulSoup库中的方法,我们可以方便地查找特定元素。例如,使用find()方法查找第一个符合条件的元素。

    title = soup.find('title')  # 查找标签</p> <h4 id="3.%20%E6%9F%A5%E6%89%BE%E5%A4%9A%E4%B8%AA%E5%85%83%E7%B4%A0"><a name="t8"></a>3. 查找多个元素</h4> <p>如果要查找多个符合条件的元素,可以使用find_all()方法。该方法将返回一个包含所有符合条件元素的列表。</p> <p>links = soup.find_all('a')  # 查找所有<a>标签</p> <h4 id="4.%20%E4%BD%BF%E7%94%A8%E9%80%89%E6%8B%A9%E5%99%A8%E9%80%89%E6%8B%A9%E5%85%83%E7%B4%A0"><a name="t9"></a>4. 使用选择器选择元素</h4> <p>除了上述方法,BeautifulSoup还支持使用选择器选择元素。以下是一个示例:</p> <p>divs = soup.select('div.container')  # 选择class为"container"的<div>标签元素</p> <h3 id="%E4%BA%94%E3%80%81%E5%BA%94%E7%94%A8%E7%A4%BA%E4%BE%8B%EF%BC%9A%E7%88%AC%E5%8F%96%E7%BD%91%E7%AB%99%E6%96%87%E7%AB%A0%E5%B9%B6%E8%A7%A3%E6%9E%90%E6%A0%87%E9%A2%98%E5%92%8C%E5%86%85%E5%AE%B9"><a name="t10"></a><br> 三、应用示例:爬取网站文章并解析标题和内容</h3> <p>下面是一个完整的示例,演示如何爬取一个网站的文章,并解析标题和内容:</p> <pre data-index="3" class="set-code-show" name="code"><code class="language-python hljs"><ol class="hljs-ln" style="width:857px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> requests  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">from</span> bs4 <span class="hljs-keyword">import</span> BeautifulSoup  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">url = <span class="hljs-string">'http://example.com/articles'</span>  <span class="hljs-comment"># 替换为实际目标网站的文章列表页面URL  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">response = requests.get(url)  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> response.status_code == <span class="hljs-number">200</span>:  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    soup = BeautifulSoup(response.text, <span class="hljs-string">'html.parser'</span>)  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    articles = soup.find_all(<span class="hljs-string">'article'</span>)  <span class="hljs-comment"># 假设每篇文章是一个<article>标签包裹的内容  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">for</span> article <span class="hljs-keyword">in</span> articles:  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        title = article.find(<span class="hljs-string">'h2'</span>).text  <span class="hljs-comment"># 假设文章标题是<h2>标签中的文本内容  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        content = article.find(<span class="hljs-string">'p'</span>).text  <span class="hljs-comment"># 假设文章内容是第一个<p>标签中的文本内容(可根据实际情况调整)  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Title: <span class="hljs-subst">{title}</span>"</span>)  <span class="hljs-comment"># 输出文章标题(可根据实际需求处理)  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Content: <span class="hljs-subst">{content}</span>"</span>)  <span class="hljs-comment"># 输出文章内容(可根据实际需求处理)</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li></ol></code><div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <p><br> 当然,让我们进一步扩展这个示例,以展示如何使用Python爬虫程序来爬取并解析一个网站上的多篇文章。</p> <h4 id="1.%20%E5%8F%91%E9%80%81%E8%AF%B7%E6%B1%82%E5%B9%B6%E8%A7%A3%E6%9E%90HTML%E5%86%85%E5%AE%B9"><a name="t11"></a>1. 发送请求并解析HTML内容</h4> <p>我们首先使用requests.get()函数发送GET请求,并获取响应。然后,我们使用BeautifulSoup库来解析响应的HTML内容。</p> <pre data-index="4" class="set-code-show" name="code"><code class="language-python hljs"><ol class="hljs-ln" style="width:100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">import</span> requests  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">from</span> bs4 <span class="hljs-keyword">import</span> BeautifulSoup  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">url = <span class="hljs-string">'http://example.com/articles'</span>  <span class="hljs-comment"># 替换为实际目标网站的文章列表页面URL  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">response = requests.get(url)  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> response.status_code == <span class="hljs-number">200</span>:  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    soup = BeautifulSoup(response.text, <span class="hljs-string">'html.parser'</span>)</div></div></li></ol></code><div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <h4 id="2.%20%E6%9F%A5%E6%89%BE%E6%96%87%E7%AB%A0%E5%85%83%E7%B4%A0%E5%B9%B6%E6%8F%90%E5%8F%96%E6%A0%87%E9%A2%98%E5%92%8C%E5%86%85%E5%AE%B9"><a name="t12"></a>2. 查找文章元素并提取标题和内容</h4> <p>接下来,我们使用BeautifulSoup库中的方法来查找文章元素,并提取每篇文章的标题和内容。</p> <pre data-index="5" class="set-code-show" name="code"><code class="language-python hljs"><ol class="hljs-ln" style="width:826px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">articles = soup.find_all(<span class="hljs-string">'article'</span>)  <span class="hljs-comment"># 假设每篇文章是一个<article>标签包裹的内容  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">for</span> article <span class="hljs-keyword">in</span> articles:  </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    title = article.find(<span class="hljs-string">'h2'</span>).text  <span class="hljs-comment"># 假设文章标题是<h2>标签中的文本内容  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    content = article.find(<span class="hljs-string">'p'</span>).text  <span class="hljs-comment"># 假设文章内容是第一个<p>标签中的文本内容(可根据实际情况调整)  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Title: <span class="hljs-subst">{title}</span>"</span>)  <span class="hljs-comment"># 输出文章标题(可根据实际需求处理)  </span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Content: <span class="hljs-subst">{content}</span>"</span>)  <span class="hljs-comment"># 输出文章内容(可根据实际需求处理)</span></div></div></li></ol></code><div class="hljs-button signin" data-title="登录后复制" data-report-click="{"spm":"1001.2101.3001.4334"}" onclick="hljs.signin(event)"></div></pre> <h4 id="3.%20%E8%BF%9B%E4%B8%80%E6%AD%A5%E5%A4%84%E7%90%86%E6%95%B0%E6%8D%AE%E6%88%96%E5%AD%98%E5%82%A8%E7%BB%93%E6%9E%9C"><a name="t13"></a>3. 进一步处理数据或存储结果</h4> <p>在上述示例中,我们只是简单地打印了每篇文章的标题和内容。然而,在实际应用中,可能需要进行更复杂的数据处理,例如存储结果到文件或数据库中,或者进一步分析文章的内容。</p> <p>例如,可以使用Python的文件操作函数将每篇文章的标题和内容写入一个文本文件中。还可以使用Python的数据库接口(如SQLite或MySQL)将数据存储在数据库中。此外,还可以使用自然语言处理技术进一步分析文章的内容,例如使用文本分类或情感分析算法来确定文章的主题或情感倾向。</p> <h4 id="4.%20%E6%B3%A8%E6%84%8F%E7%88%AC%E8%99%AB%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%90%88%E6%B3%95%E6%80%A7%E5%92%8C%E9%81%93%E5%BE%B7%E9%97%AE%E9%A2%98"><a name="t14"></a>4. 注意爬虫程序的合法性和道德问题</h4> <p>在使用Python爬虫程序时,请确保遵守网站的爬虫政策和其他相关法律法规。尊重网站的隐私政策,并避免对目标网站造成过大的访问压力。此外,请注意不要频繁地访问同一网站,以避免触发目标网站的防爬虫机制。</p> <h3 id="%E6%80%BB%E7%BB%93"><a name="t15"></a>总结</h3> <p>本文介绍了如何使用Python进行网络爬虫编程,包括网络请求和内容解析两个主要步骤。通过示例演示了如何爬取一个网站的文章列表页面,并解析每篇文章的标题和内容。在实际应用中,可以根据需要扩展这个示例来处理更复杂的数据结构和进行更高级的数据分析。同时,请注意遵守相关法律法规和网站的隐私政策,以避免不必要的法律风险和道德问题。</p> </div> </div> </li> <li class="list-group-item ul-li"> <b>相关阅读:</b><br> <nobr> <a href="/Article/Index/902921">【优化布局】基于Lichtenberg算法(MOSSPOLA)实现多目标传感器选择与放置优化问题附matlab代码</a> <br /> <a href="/Article/Index/854911">弱网测试探索</a> <br /> <a href="/Article/Index/987503">企业移动设备管理(MDM)概述</a> <br /> <a href="/Article/Index/782042">免费翻译软件-批量自动一键翻译</a> <br /> <a href="/Article/Index/873840">基础知识点</a> <br /> <a href="/Article/Index/645527">电信行业信创发展前景广阔 如何选择可靠的信创传输软件?</a> <br /> <a href="/Article/Index/1005064">9月【笔耕不辍】勋章活动获奖名单公布</a> <br /> <a href="/Article/Index/1304089">Oracle 设置密码有效期</a> <br /> <a href="/Article/Index/1076213">CTFshow web42 43 44 45 46 47</a> <br /> <a href="/Article/Index/926263">金仓数据库兼容Oracle exp/imp的导出导入工具手册(3. exp/imp工具介绍)</a> <br /> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://blog.csdn.net/wq2008best/article/details/134413688 </li> </ul> </div> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a> <br /> <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a> <br /> <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a> <br /> <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a> <br /> <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a> <br /> <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a> <br /> <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a> <br /> <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a> <br /> <a href="/Article/Index/1887520">AnatoMask论文汇总</a> <br /> <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a> <br /> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a> <br /> <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a> <br /> <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a> <br /> <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a> <br /> <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a> <br /> <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a> <br /> <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a> <br /> <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a> <br /> <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a> <br /> <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a> <br /> </nobr> </li> </ul> </div> </div> </div> <!-- 主体 --> <!--body结束--> <!--这里是footer模板--> <!--footer--> <nav class="navbar navbar-inverse navbar-fixed-bottom"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="text-muted center foot-height"> Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>    <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a> </div> <div style="width:300px;margin:0 auto; padding:0px 5px;"> <a href="/regex.html">正则表达式工具</a> <a href="/cron.html">cron表达式工具</a> <a href="/pwdcreator.html">密码生成工具</a> </div> <div style="width:300px;margin:0 auto; padding:5px 0;"> <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"> <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a> </div> </div> </div> </div> </nav> <!--footer--> <!--footer模板结束--> <script src="/js/plugins/jquery/jquery.js"></script> <script src="/js/bootstrap.min.js"></script> <!--这里是scripts模板--> <!--scripts模板结束--> </body> </html>