Python构建基础的爬虫教学
概述
爬虫是一种自动化抓取网页数据的程序,可以帮助我们快速获取海量数据。Python作为一种易于学习、简洁明了、功能齐全的编程语言,是非常适用于构建爬虫应用的语言。在本篇教程中,我们将介绍Python构建基础的爬虫应用的入门知识,包括Python爬虫的基本原理、库的使用以及实战案例。
基本原理
Python爬虫的基本原理是通过模拟HTTP请求,从一个网站上获取需要的数据。要完成这个过程,我们需要了解以下几个知识点:
- 网络协议:HTTP协议是我们在爬虫过程中最常用的通信协议,它是Web应用的基础协议。
- HTML基础知识:爬虫需要理解HTML结构和标签用法,进而实现数据的提取。
- 数据解析:提取数据的过程中需要进行数据解析,可以通过正则表达式和XPath等方式进行。
- 网络请求库:Python提供了许多第三方库,可以帮助我们发送HTTP请求并解析数据,例如requests和urllib。
库的使用
requests库
requests是Python的一个HTTP库,它使得发送HTTP请求变得更加简单。使用requests发送请求时需要先安装该库:
pip install requests
使用requests发送一个简单的GET请求:
import requests
url = "http://www.example.com"
response = requests.get(url)
print(response.text)
这个例子中,我们使用requests发送了一个GET请求,然后打印了响应的HTML内容。
BeautifulSoup库
BeautifulSoup是Python的一个库,用于解析HTML和XML文档。在爬虫过程中,我们通常需要从HTML文档中提取我们需要的数据,这时就可以使用BeautifulSoup来帮助我们实现。
使用BeautifulSoup解析HTML文档:
from bs4 import BeautifulSoup
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>
<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>
<p class="story">...</p>
"""
soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.title)
print(soup.title.name)
print(soup.title.string)
print(soup.p)
这个例子中,我们使用BeautifulSoup解析了一个HTML文档,并提取了其中的title和p标签内容。
正则表达式
正则表达式是一种用于匹配字符串的模式,非常适合爬虫的数据解析。Python的re模块提供了对正则表达式的支持。
使用正则表达式匹配字符串:
import re
pattern = r'\d+' # 匹配数字
text = 'Hello 123 world'
match = re.search(pattern, text)
if match:
print(match.group())
这个例子中,我们使用正则表达式匹配数字,并在字符串中找到了123。
XPath
XPath是一种用于选择XML文档中节点的语言,也可以用于爬虫的数据解析。Python的lxml库提供了对XPath的支持。
使用XPath解析XML文档:
from lxml import etree
xml = """
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
</bookstore>
"""
root = etree.fromstring(xml)
print(root.xpath('//book'))
这个例子中,我们使用lxml库解析了一个XML文档,并使用XPath选择了其中的book节点。
实战案例
爬取天气信息
我们可以从天气网站上爬取天气信息,并将其存储到本地文件中。
import requests
from bs4 import BeautifulSoup
url = "http://www.weather.com.cn/weather/101280601.shtml"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
temperature = soup.find(class_='tem').text
weather = soup.find(id='weath').text
wind = soup.find(class_='win').span['title']
with open('weather.txt', 'w') as f:
f.write("Temperature: {}\nWeather: {}\nWind: {}".format(temperature, weather, wind))
这个例子中,我们从天气网站上爬取了广州的天气信息,并存储到了weather.txt文件中。
爬取简书文章列表
我们可以从简书网站上爬取文章列表,并将其存储到本地文件或者数据库中。
import requests
from bs4 import BeautifulSoup
url = "https://www.jianshu.com"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.find_all(class_='content')
with open('articles.txt', 'w') as f:
for article in articles:
title = article.find(class_='title').text.strip()
author = article.find(class_='name').text
content = article.find(class_='abstract').text.strip()
f.write("Title: {}\nAuthor: {}\nContent: {}\n\n".format(title, author, content))
这个例子中,我们从简书网站上爬取了文章列表,并存储到了articles.txt文件中。
总结
Python是一个非常适合构建爬虫应用的语言,它提供了许多第三方库,使得爬虫的操作变得更加简单。在学习爬虫过程中,我们需要掌握HTTP协议、HTML基础知识、数据解析方法和各种网络请求库的使用。最后,还需要不断练习实战,加深对爬虫应用的理解和掌握。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python构建基础的爬虫教学 - Python技术站