爬虫入门,适合新手,代码和知识点俱全

爬虫是通过程序模拟浏览器行为获取网络资源。发起请求使用http库如requests,获取响应后使用BeautifulSoup等工具解析HTML,提取所需数据。Scrapy是一个强大的爬虫框架,包含引擎、调度器、下载器等组件,用于高效抓取和处理数据。
摘要由CSDN通过智能技术生成

爬虫入门

一、什么是爬虫

爬虫spider就是向网站/网络发出请求,获取资源后分析并提取有效数据。

其实就是通过程序模拟浏览器请求站点的行为,将站点的HTML代码和JSON数据等爬到本地,进而提取自己所需要的数据。

总结:网页——请求——数据——提取
二、具体原理
2.1发起请求

使用http库函数向目标网页发起请求,也就是发一个Request

import requests
from bs4 import BeautifulSoup
# 发起请求并获取响应
url = 'https://example.com'  # 你要爬取的网页地址

Request包含请求头、请求体等,但是不能执行JS和CSS代码(当然提取数据大部分也不需要JS和CSS代码)

2.2获取响应

如果请求正确,会得到一个想要的Response,可能是Html、JSON、图片、视频等。

#获取响应
response = requests.get(url)
2.3对响应进行解析

解析html数据:正则表达式(RE模块)、xpath(路径)、beautiful soup、css

解析json数据:JSON模块

解析二进制数据:以wb的方式写入文件("w"表示以文本模式写入文件,而"b"表示以二进制模式写入文件)

# 解析响应
soup = BeautifulSoup(response.text, 'html.parser')  # 假设响应内容是HTML,使用'html.parser'解析器

# 提取数据
# 根据网页结构和所需数据的位置,使用BeautifulSoup提供的相关方法来提取数据
# 以下只是一个示例,具体的数据提取方法需要根据网页结构进行调整
data = soup.find('div', class_='example-class').text
2.4得到解析后的数据并存储

数据库或者csv文件

import csv

data = [['Name', 'Age', 'City'],
        ['John', '25', 'New York'],
        ['Alice', '30', 'Chicago'],
        ['Bob', '35', 'San Francisco']]

filename = 'data.csv'  # CSV文件名

# 写入CSV文件
with open(filename, 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)
三、相关知识
3.1request
  1. 请求方式

    常见的请求方式:GET(获取) POST(传递)

  2. 请求的url

    url是全球统一资源定位符,用来定义互联网上一个唯一的资源 例如:一张图片、一个文件、一段视频都可以用url唯一确定

  3. 请求头

    User-agent:请求头在需要有一个用户代码的客户端配置,否则服务器可能会把请求当作一个非法用户

    cookie:cookie用来保存登录信息

  4. 请求头需要的参数

    Referrer:访问源从哪里来(一些大型网站,会用Referer做防盗链,所以要注意模拟)

    user-agent:

    cookie:

  5. 请求体

    如果是get方式,请求体没有内容 (get请求的请求体放在 url后面参数中,直接能看到)

    如果是post方式,请求体是格式化数据

3.2response
  1. 响应状态码

    200 响应成功

    301 跳转

    404 网页不存在

    403 无权限访问

    502 服务器错误

  2. response header——响应头

    响应头需要注意的参数:Set-Cookie:BDSVRTM=0; path=/:可能有多个,是来告诉浏览器,把cookie保存下来

  3. perview——网页源代码

    json数据

    如网页html,图片

3.3 request模块

request模块是Python中用于发送HTTP请求的一个第三方库,通过它可以方便地实现网络请求和获取响应。它提供了简洁易用的API,包括GET、POST、PUT等请求方法,可以设置请求头、请求体、查询参数等,同时还支持文件上传、Cookie管理等功能。

使用request模块,你可以通过发起HTTP请求获取网络资源,例如网页内容、API数据等。通过获取的响应,你可以进一步处理和解析数据,以及执行其他业务逻辑。

发送GET请求:
import requests

url = 'https://example.com'
response = requests.get(url)
print(response.text)  # 获取响应的文本内容

发送POST请求:
import requests

url = 'https://example.com'
data = {'username': 'admin', 'password': '123456'}
response = requests.post(url, data=data)
print(response.status_code)  # 获取响应的状态码
3.4re 正则表达式

re是Python内置的正则表达式模块,它提供了一组函数用于处理字符串匹配和查找。正则表达式是一种用来描述和匹配特定模式的字符串,可以用于搜索、匹配、替换等操作。

使用re模块,你可以通过定义正则表达式来检查字符串是否满足指定的模式,或者从字符串中提取符合条件的部分。

以下是re模块的一些常见用法示例:

使用match方法匹配字符串起始部分:

import re

pattern = r'^Hello'
string = 'Hello, World!'
match = re.match(pattern, string)
if match:
    print('Match found')
else:
    print('Match not found')

使用search方法在字符串中查找匹配项:

import re

pattern = r'World'
string = 'Hello, World!'
match = re.search(pattern, string)
if match:
    print('Match found')
else:
    print('Match not found')
3.5Xpath

XPath是一种基于路径表达式的查询语言,常用于在XML和HTML文档中定位和提取数据。在Python中,我们可以使用lxml库来解析和处理XML和HTML文档,并使用XPath来定位和提取其中的数据。

使用XPath,你可以通过元素的路径、属性、文本内容等特征来定位和提取数据。

以下是XPath的一些常见用法示例:

from lxml import etree

xml_string = '''
<root>
  <book category="fiction">
    <title lang="en">Harry Potter</title>
    <author>J.K. Rowling</author>
  </book>
  <book category="fiction">
    <title lang="en">The Hobbit</title>
    <author>J.R.R. Tolkien</author>
  </book>
</root>
'''

# 解析XML
root = etree.fromstring(xml_string)

# 使用XPath提取数据
titles = root.xpath('//book/title/text()')
for title in titles:
    print(title)
3.6BeautifulSoup

BeautifulSoup是一个用于解析HTML和XML文档的Python库,它提供了简化的API来遍历和搜索文档树,以及提取其中的数据。BeautifulSoup会自动将输入文档转换为Unicode,并使用特定的解析器进行解析。

使用BeautifulSoup,你可以根据标签、属性、文本内容等特征来进行文档的解析和数据提取。

以下是BeautifulSoup的一些常见用法示例:

from bs4 import BeautifulSoup

html = '''
<html>
  <body>
    <h1>Hello, World!</h1>
    <p>This is a paragraph.</p>
    <a href="https://example.com">Visit Example</a>
  </body>
</html>
'''

# 解析HTML
soup = BeautifulSoup(html, 'html.parser')

# 提取数据
title = soup.h1.text
paragraph = soup.p.text
link = soup.a['href']

print(title)
print(paragraph
3.7JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写。同时也方便了机器进行解析和生成。适用于进行数据交互的场景,比如网站前台与后台之间的数据交互。

在python中主要使用 json 模块来处理 json数据。

3.8threading线程

使用threading模块创建线程,直接从threading.Thread继承,然后重写__init__方法和run方法

四、爬虫框架
4.1Scrapy主要组件

Scrapy Engine(引擎): 负责Spider、ItemPipeline、Downloader、Scheduler中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的方式进行整理排列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests请求,并将其获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字段需要的数据,并将需要跟进的URL提交给引擎,再次进入Scheduler(调度器),

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处理(详细分析、过滤、存储等)的地方.

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩展下载功能的组件。

Spider Middlewares(Spider中间件):你可以理解为是一个可以自定扩展和操作引擎和Spider中间通信的功能组件(比如进入Spider的Responses;和从Spider出去的Requests)

4.2Scrapy的运作流程

引擎:Hi!Spider, 你要处理哪一个网站?

Spider:老大要我处理xxxx.com。

引擎:你把第一个需要处理的URL给我吧。

Spider:给你,第一个URL是xxxxxxx.com。

引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

调度器:好的,正在处理你等一下。

引擎:Hi!调度器,把你处理好的request请求给我。

调度器:给你,这是我处理好的request

引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个request请求

下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个request下载失败了。然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会儿再下载)

引擎:Hi!Spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,你自己处理一下(注意!这儿responses默认是交给def parse()这个函数处理的)

Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有两个结果,这个是我需要跟进的URL,还有这个是我获取到的Item数据。

引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进URL你帮我处理下。然后从第四步开始循环,直到获取完老大需要全部信息。

管道``调度器:好的,现在就做!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxrgfruh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值