python爬虫流程原理

目录

一、网络爬虫概述: 

1.什么是爬虫

二.爬虫基本流程:

1.发起请求

2.获取响应内容

3.解析内容

4.保存数据

三.网络爬虫的工作原理:

1.发送HTTP请求

 2.解析HTML

3.数据提取

4.数据存储

四.实例演示:

 1.网络爬虫示例

2.示例的代码和解释


一、网络爬虫概述: 

1.什么是爬虫

爬虫(spider,又叫网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。

通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频)爬到本地,进而提取自己需要的数据,存放起来使用。

网络爬虫,也被称为网络蜘蛛、网络机器人或网页抓取器,是一种自动化程序或脚本,设计用来在互联网上自动获取信息并收集数据

二.爬虫基本流程:

用户获取网络数据的方式:

方式1:浏览器提交请求—>下载网页代码—>解析成页面

方式2:模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中

1.发起请求

使用http库向目标站点发起请求,即发送一个Request

Request包含:请求头、请求体等

Request模块缺陷:不能执行JS 和CSS 代码

2.获取响应内容

如果服务器能正常响应,则会得到一个Response

Response包含:html,json,图片,视频等

3.解析内容

解析html数据:正则表达式(RE模块)、xpath(主要使用)、beautiful soup、css

解析json数据:json模块

解析二进制数据:以wb的方式写入文件

4.保存数据

可以将提取到的数据保存到本地文件,这对于小规模的数据提取非常方便。常见的本地文件格式包括文本文件(如CSV、JSON、XML)、Excel文件等。以下是一些常见的方法:

三.网络爬虫的工作原理:

1.发送HTTP请求

 确定目标URL: 爬虫需要确定要获取的网页的URL,可以通过手动输入或从其他源获取。

发送HTTP请求: 爬虫使用网络库或框架发送构建好的HTTP请求到目标URL。这个请求会被发送到服务器上,并等待服务器的响应。

 2.解析HTML

HTML解析的过程,使用的工具,如Beautiful Souplxml 。

Beautiful Soup: Beautiful Soup是一个功能强大的Python库,用于解析HTML和XML文档。它能够将HTML代码转换为树状结构,使得开发者可以使用Python代码遍历、搜索和提取所需的元素和数据。Beautiful Soup提供了一些便捷的方法和函数,可以根据标签、类名、属性等进行元素的查找和提取。
lxml: lxml是另一个流行的Python库,主要用于处理XML和HTML文档。它使用C语言实现,速度较快,并且具有XPath支持,可以使用XPath表达式非常方便地选择和提取文档中的元素。

3.数据提取

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.数据存储


保存到本地文件:你可以将提取到的数据保存到本地文件,这对于小规模的数据提取非常方便。常见的本地文件格式包括文本文件(如CSVJSONXML)、Excel文件等

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)

四.实例演示:

 1.网络爬虫示例

示例目标网站:我们将使用一个示例网站Quotes to Scrape,这是一个用于练习网络爬虫的网站。

请确保你已经安装了以下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库解析网页内容。这里我们提取了网页的标题和图片链接作为示例。

最后,输出网页标题和图片链接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值