您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

使用 Python 进行网络爬虫——从0构建简单爬虫

时间:2022-09-06 14:37:44  来源:今日头条  作者:IT街or

要在 Python/ target=_blank class=infotextkey>Python 中构建一个简单的网络爬虫,我们至少需要一个库来从 URL 下载 html,还需要一个 HTML 解析库来提取链接。Python 提供标准库urllib用于发出 HTTP 请求和html.parser用于解析 HTML。仅使用标准库构建的 Python 爬虫示例可以在Github上找到。

用于请求和 HTML 解析的标准 Python 库对开发人员不太友好。其他流行的库,如requests、品牌为人类的 HTTP 和Beautiful Soup提供了更好的开发者体验。

如果您想了解更多信息,可以查看有关最佳 Python HTTP 客户端的指南。

您可以在本地安装这两个库。

pip install requests bs4

可以按照前面的架构图搭建一个基本的爬虫。


import logging
from urllib.parse 
import urljoin
import requests
from bs4 
import BeautifulSoup
 
logging.basicConfig(
    
format=
'%(asctime)s %(levelname)s:%(message)s',
    level=logging.INFO)
 
class 
Crawler:
 
    
def 
__init__(
self, urls=[]):
        self.visited_urls = []
        self.urls_to_visit = urls
 
    
def 
download_url(
self, url):
        
return requests.get(url).text
 
    
def 
get_linked_urls(
self, url, html):
        soup = BeautifulSoup(html, 
'html.parser')
        
for link 
in soup.find_all(
'a'):
            path = link.get(
'href')
            
if path 
and path.startswith(
'/'):
                path = urljoin(url, path)
            
yield path
 
    
def 
add_url_to_visit(
self, url):
        
if url 
not 
in self.visited_urls 
and url 
not 
in self.urls_to_visit:
            self.urls_to_visit.Append(url)
 
    
def 
crawl(
self, url):
        html = self.download_url(url)
        
for url 
in self.get_linked_urls(url, html):
            self.add_url_to_visit(url)
 
    
def 
run(
self):
        
while self.urls_to_visit:
            url = self.urls_to_visit.pop(
0)
            logging.info(
f'Crawling: {url}')
            
try:
                self.crawl(url)
            
except Exception:
                logging.exception(
f'FAIled to crawl: {url}')
            
finally:
                self.visited_urls.append(url)
 
if __name__ == 
'__main__':
    Crawler(urls=[
'https://www.imdb.com/']).run()

上面的代码定义了一个 Crawler 类,其中包含使用 requests 库的 download_url、使用 Beautiful Soup 库的 get_linked_urls 和过滤 URL 的 add_url_to_visit 的帮助方法。要访问的 URL 和已访问的 URL 存储在两个单独的列表中。您可以在终端上运行爬虫。

python crawler.py

爬虫为每个访问的 URL 记录一行。

 

2020-12-04 18:10:10,737 INFO:Crawling: https://www.imdb.com/
2020-12-04 18:10:11,599 INFO:Crawling: https://www.imdb.com/?ref_=nv_home
2020-12-04 18:10:12,868 INFO:Crawling: https://www.imdb.com/calendar/?ref_=nv_mv_cal
2020-12-04 18:10:13,526 INFO:Crawling: https://www.imdb.com/list/ls016522954/?ref_=nv_tvv_dvd
2020-12-04 18:10:19,174 INFO:Crawling: https://www.imdb.com/chart/top/?ref_=nv_mv_250
2020-12-04 18:10:20,624 INFO:Crawling: https://www.imdb.com/chart/moviemeter/?ref_=nv_mv_mpm
2020-12-04 18:10:21,556 INFO:Crawling: https://www.imdb.com/feature/genre/?ref_=nv_ch_gr

代码非常简单,但是在成功爬取一个完整的网站之前,还有许多性能和可用性问题需要解决。

  • 爬虫很慢,不支持并行。从时间戳可以看出,爬取每个 URL 大约需要一秒钟。每次爬虫发出请求时,它都会等待请求被解析,并且在两者之间不做任何工作。
  • 下载 URL 逻辑没有重试机制,URL 队列不是真正的队列,在 URL 数量多的情况下效率不高。
  • 链接提取逻辑不支持通过删除 URL 查询字符串参数来标准化 URL,不处理以 # 开头的 URL,不支持按域​过滤 URL 或过滤对静态文件的请求。
  • 爬虫不会识别自己并忽略 robots.txt 文件。


Tags:网络爬虫   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
OpenAI宣布允许网站拦截网络爬虫,保障数据隐私
【ITBEAR科技资讯】8月8日消息,随着人工智能技术的迅猛发展,大型语言模型成为AI领域的一大热点。OpenAI旗下的GPT模型在自然语言处理方面取得了显著的进展,但在训练过程中却涉...【详细内容】
2023-08-08  Search: 网络爬虫  点击:(250)  评论:(0)  加入收藏
网站可以阻止OpenAI网络爬虫 避免数据用于训练 GPT 模型
本文概要:1. OpenAI 现允许网站屏蔽其网络爬虫,以防止其抓取网站内容训练 GPT 模型的。2. 阻止 GPTBot 可能是 OpenAI 允许互联网用户选择不让其数据用于训练其大型语言模型...【详细内容】
2023-08-08  Search: 网络爬虫  点击:(249)  评论:(0)  加入收藏
OpenAI推出网络爬虫机器人GPTBot:收集数据改进AI模型
快科技8月8日消息,OpenAI推出了一种名为GPTBot的网络爬虫机器人,用于收集信息数据以改进未来的AI模型。据了解,GPTBot将严格遵守任何付费墙的规则,不会抓取需要付费的信息,并且也...【详细内容】
2023-08-08  Search: 网络爬虫  点击:(54)  评论:(0)  加入收藏
Python网络爬虫之Xpath详解
1、什么是Xpath XPath 是一门在 XML 文档中查找信息的语言。 所谓 Xpath,是指 XML path language,path 就是路径, Xpath 主要是通过路径来查找元素。 咱们先看一个HTML结构 <ht...【详细内容】
2023-06-10  Search: 网络爬虫  点击:(312)  评论:(0)  加入收藏
从零开始学Python爬虫,一篇文章就够了!
什么是网络爬虫?网络爬虫是一种自动化程序,用于抓取互联网上的数据。网络爬虫可以自动访问网页、解析网页内容、提取所需数据、存储数据等。通过使用网络爬虫,我们可以获取大量...【详细内容】
2023-05-17  Search: 网络爬虫  点击:(165)  评论:(0)  加入收藏
Python网络爬虫代码编写:九大技巧全解析
网络爬虫是一种自动化程序,可以获取互联网上的数据并将其存储在本地计算机上。Python是一种功能强大的编程语言,广泛用于Web开发、数据分析和科学计算。在本文中,我们将详细介...【详细内容】
2023-04-26  Search: 网络爬虫  点击:(311)  评论:(0)  加入收藏
盘点一个高德地图Python网络爬虫中前端数据和获取数据不一致问题
一、前言前几天在Python钻石交流群【心田有垢生荒草】问了一个Python网络爬虫的问题,下图是截图:代码初步看上去好像没啥问题,但是结果就是不对,地图上显示的结果和网络爬虫抓到...【详细内容】
2022-10-31  Search: 网络爬虫  点击:(374)  评论:(0)  加入收藏
使用 Python 进行网络爬虫——从0构建简单爬虫
要在 Python 中构建一个简单的网络爬虫,我们至少需要一个库来从 URL 下载 HTML,还需要一个 HTML 解析库来提取链接。Python 提供标准库urllib用于发出 HTTP 请求和html.parser...【详细内容】
2022-09-06  Search: 网络爬虫  点击:(311)  评论:(0)  加入收藏
python网络爬虫基于selenium爬取斗鱼直播信息
前言目前是直播行业的一个爆发期,由于国家对直播行业进行整顿和规范,现在整个直播行业也在稳固发展。随着互联网和网络直播市场的快速发展,相信未来还有广阔的发展前景。今天用...【详细内容】
2022-03-15  Search: 网络爬虫  点击:(291)  评论:(0)  加入收藏
一文弄清Python网络爬虫解析库!内含多个实例讲解
在了解爬虫基础、请求库和正则匹配库以及一个具体豆瓣电影爬虫实例之后,可能大家还对超长的正则表达式记忆犹新,设想如果想要匹配的条目更加多那表达式长度将会更加恐怖,这显然...【详细内容】
2021-04-12  Search: 网络爬虫  点击:(475)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(3)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(2)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(8)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(18)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(34)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(35)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(36)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(89)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(88)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(59)  评论:(0)  加入收藏
站内最新
站内热门
站内头条