在本文中,我们将构建一个程序,允许您使用 Python 脚本从网站上抓取或抓取数据。这种收集数据的方法称为网络抓取。
网页抓取就是使用 Python 或任何其他编程语言以编程方式下载、清理和使用网页中的数据。大多数网站不希望你抓取他们的数据,为了找出什么是合法的和允许抓取的,网站有一个专门的页面,显示允许的端点的详细信息。
将 robots.txt 附加到任何链接的末尾,以了解允许的端点。例如,让我们使用https://news.ycombinator.com/robots.txt 。
使用下面的文本文件,结果应如下所示:
截图说明了我们被允许和不允许从 YCombinator 网站上抓取的端点。抓取延迟意味着在使用程序从网站抓取数据时暂停,从而不会因为不断抓取而导致其服务器超载并减慢网站速度。
在这个练习中,我们抓取新闻内容的主页,我们可以根据用户代理来完成。
Python web scraper 需要两个必要的模块来抓取数据:
Beautiful Soup 是一个 Python 库,用于从 HTML 文件中提取数据。它使用解析器修改文件,将数据转换为有价值的文档,并为程序员节省数小时的手动和重复性工作。
requests HTTP 库用于使用带有
.get()
功能。现在来看看这个项目的本质。创建一个新目录,并在其中创建一个文件,该文件将包含网络爬虫程序的所有脚本。
复制并粘贴以下代码:
# app.py import requests response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text print(yc_web_page)
上面的代码执行以下操作:
requests
模块.get()
功能从提供的网站链接下载 HTML 文件.text
如果您使用命令 python 运行此代码
app.py
它没有给你任何输出,这意味着需要安装两个导入的模块。运行以下命令来安装模块。
pip3 install requests pip install beautifulsoup4
源代码的结果应如下所示:
接下来,让我们更新
app.py
使用漂亮的汤与其余代码一起文件: # main.py import requests from bs4 import BeautifulSoup # add this
response = requests.get( 'https://news.ycombinator.com/news' ) yc_web_page = response.text # add this
soup = BeautifulSoup(yc_web_page, 'html.parser' ) article_tag = soup.find(name= "a" , class_= 'titlelink' ) article_title = article_tag.get_text() article_link = article_tag.get( 'href' ) article_upvote = soup.find(name= "span" , class_= "score" ).get_text() result = { "title" : article_title, "link" : article_link, "point" : article_upvote } print(result)
按照上面的代码片段执行以下操作:
yc_web_page
使用 BeautifulSoup 功能和html.parser
获取 HTML 文件在浏览其余代码之前,让我们使用提供的链接打开我们的网络浏览器
.get()
接下来,在页面上右击,点击inspect,查看YCombinator新闻页面的elements选项卡。
我们的网页应该是这样的:
使用 Beautiful Soup,我们可以使用它们的类名来定位页面上的特定元素:
find()
具有元素名称、 a标签和class_
带下划线。这样做是为了防止覆盖网页元素中的类article_tag
使用.get_text()
功能article_tag
使用属性href
与.get()
功能article_upvote
变量,其中标签名称, <span>
, 类名用于提取每篇文章链接的点数编写完整个脚本后,我们的页面应该会从 YCombinator 的新闻主页中抓取数据,如下所示:
本文教你如何使用 Python 网络爬虫从网页中提取数据。
此外,使用网络抓取工具的功能还在于,它可以节省时间和精力来更快地而不是手动地生成大型数据集。