目录
1.网络爬虫示例。示例目标网站:我们将使用一个示例网站 http://quotes.toscrape.com,这是一个用于练习网络爬虫的网站。
一.问题描述:
网络爬虫,又称为网页蜘蛛。是一种按照一定规则获取网页内容的程序,爬虫被广泛用于互联网搜索引擎或其他类似网站,例如谷歌、百度,爬虫可以自动采集所有其能够访问到的页面内容,以获取或更新这些网站的数据。从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。
爬虫是Python的一个重要的内容,使用Python爬虫我们可以轻松的从网络中批量抓取我们想要的数据。
二、爬虫的基本步骤
1.确定URL(链接)、分析网页
确定目标URL: 爬虫需要确定要获取的网页的URL,可以通过手动输入或从其他源获取。
构建HTTP请求: 爬虫需要构建一个HTTP请求,该请求包含一些必要的信息,例如目标URL、请求方法(例如GET或POST)、请求头部等。在请求头部中,可以包含一些模拟浏览器的信息,如User-Agent、Referer等,以使请求看起来更像是由真实浏览器发送的。
发送HTTP请求: 爬虫使用网络库或框架发送构建好的HTTP请求到目标URL。这个请求会被发送到服务器上,并等待服务器的响应。
点击下一页URL不发生变化是动态加载;如果网页需要往下拉才能查看更多的内容的一般都是动态加载。
然后查看内容是否在网页源代码里面,如果在的话,一般都是静态网页,反之,则是动态加载网页。
2.模拟浏览器,获取数据
一般用requests、urllib等库实现HTTP网络请求,获取网页源代码或者json数据。
3. 解析网页,提取数据
一般用re正则表达式、Beautiful Soup、xpath等方法提取网页数据。
CSS选择器: CSS选择器是一种通过选择元素的标签名、类名、ID、属性等方式来定位和提取元素的方法。在使用CSS选择器时,可以使用各种选择器组合来精确地定位所需的元素。
例如,如果要提取所有<a>标签中的链接文本,可以使用以下CSS选择器:a。如果要提取类名为my-class的所有段落文本,可以使用以下CSS选择器:.my-class。
在Python中,可以使用Beautiful Soup库来执行CSS选择器。使用Beautiful Soup的select()方法,可以将CSS选择器作为参数传递,并返回匹配的元素列表。
下面是一个使用Beautiful Soup进行CSS选择器提取的示例代码:
from bs4 import BeautifulSoup
# HTML代码
html = """
<html>
<body>
<h1>Title</h1>
<div class="my-class">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</div>
<a href="https://example.com">Link</a>
</body>
</html>
"""
# 创建Beautiful Soup对象
soup = BeautifulSoup(html, 'html.parser')
# 使用CSS选择器提取信息
titles = soup.select('h1')
paragraphs = soup.select('.my-class p')
links = soup.select('a[href]')
# 打印提取到的信息
for title in titles:
print(title.text)
for paragraph in paragraphs:
print(paragraph.text)
for link in links:
print(link['href'])
XPath: XPath是另一种强大的定位和提取技术,它使用路径表达式在XML和HTML文档中选择节点。XPath基于文档结构和元素之间的关系,允许更灵活和具有精确目标的元素提取。
XPath路径可以使用元素名称、属性、文本内容等标准来定位元素。使用XPath的优势是可以通过一系列特定的路径表达式来获取所需的元素。
在Python中,可以使用lxml库来执行XPath提取。使用lxml的xpath()方法,可以将XPath表达式作为参数传递,并返回匹配的元素列表。
下面是一个使用lxml进行XPath提取的示例代码:
from lxml import etree
# HTML代码
html = """
<html>
<body>
<h1>Title</h1>
<div class="my-class">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
</div>
<a href="https://example.com">Link</a>
</body>
</html>
"""
# 创建lxml解析器
parser = etree.HTMLParser()
# 解析HTML代码
tree = etree.parse(StringIO(html), parser)
# 使用XPath提取信息
titles = tree.xpath('//h1')
paragraphs = tree.xpath('//div[@class="my-class"]/p')
links = tree.xpath('//a/@href')
# 打印提取到的信息
for title in titles:
print(title.text)
for paragraph in paragraphs:
print(paragraph.text)
for link in links:
print(link)
4.保存数据
提取数据后,可以对文本、视频、图片等文件进行保存。文本可以保存为TXT、DOCX、CSV等文件格式。图片可以保存为jpg等格式。视频可以保存为MP4等格式。
CSV文件: 如果你提取的数据是表格形式的,CSV(逗号分隔值)是一个常用的格式。你可以使用Python的csv
库来创建、写入和读取CSV文件。
import csv
data = [...] # 提取到的数据
with open('data.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerows(data)
JSON文件: 如果你的数据是结构化的,JSON是一种常用的格式。你可以使用Python的json
库来保存数据到JSON文件。
import json
data = {...} # 提取到的数据
with open('data.json', 'w') as jsonfile:
json.dump(data, jsonfile)
其他格式: 根据需要,你还可以将数据保存为XML、Excel或其他自定义格式的文件。
三、实例演示:
1.网络爬虫示例。
示例目标网站:我们将使用一个示例网站 http://quotes.toscrape.com,这是一个用于练习网络爬虫的网站。
请确保你已经安装了以下Python库:
requests:用于发送HTTP请求和获取网页内容。
BeautifulSoup:用于解析HTML网页内容。
import requests
from bs4 import BeautifulSoup
# 目标网站的URL
url = 'http://quotes.toscrape.com'
# 发送HTTP GET请求,获取网页内容
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
# 使用Beautiful Soup解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')
# 提取网页的标题
title = soup.title.string
print('网页标题:', title)
# 提取网页中的图片链接
img_tags = soup.find_all('img')
img_links = [img['src'] for img in img_tags]
print('图片链接:')
for img_link in img_links:
print(img_link)
else:
print('请求失败,状态码:', response.status_code)
2.示例的代码和解释。
- 使用requests库发送HTTP GET请求,获取目标网站的网页内容。
- 检查请求是否成功(HTTP状态码为200表示成功)。
- 使用BeautifulSoup库解析网页内容。这里我们提取了网页的标题和图片链接作为示例。
- 最后,输出网页标题和图片链接。
今天的分享到此结束,下周再见咯