python爬虫基础

简介: python爬虫基础

免责声明

技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得利用网络从事危害国家安全、荣誉和利益,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!譬如收集大规模集群(包括网络设备、操作系统、应用程序)的监控数据并进行存储。查询使用本文所提供的信息或工具即视为同意本免责声明,并承诺遵守相关法律法规和道德规范

HTTP协议

请求

1.请求行 -> 请求方式{get/post} 请求url地址 协议,一些反扒内容
2.响应头 -> 放一些服务器使用的附加信息
3
4.请求体 -> 一般放一些请求参数

响应

1.状态行 -> 协议 状态码 {eg:200 403 404}
2.响应头 -> 放一些客户端需要使用的一些附加信息
3.
4.响应体 ->服务器返回短的真正客户端要用的内容{HTML,JS...}

请求头及响应头一般隐含着比较重要的内容

请求头;
1.UA头:请求载体的身份标识(用啥发送的请求)
2.referer:防盗链(这个请求从哪个页面来的{反爬用})
3.cookie;本地字符串数据信息(用户登录信息,反爬的token)
响应头;
1.cookie;本地字符串数据信息(用户登录信息,反扒的token)
2.各种莫名其妙的字符串(一般是token字样,繁殖攻击与反爬)

requests;

import requests  # 导入requests模块
query = input("你想要得到的")
url = f'https://www.sogou.com/web?query={query}'
dlc = {  # 建立UA头
    "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; Tablet PC 2.0; wbx 1.0.0; wbxapp 1.0.0; Zoom 3.6.0)",
}
resq = requests.get(url, headers=dlc)  # 以GET请求运行requests,url为目标,headers为要引用的头文件
print(resq)  # 输出状态码
print(resq.text)  # 输出网站HTML源代码

实列

利用requests获得百度翻译结果
url = "https://fanyi.baidu.com/sug"
word = input("要翻译的单词")
heads = {
    # 输入目标单词的参数
    "kw": word
}
# 发送POST请求,发送的数据必须放在字典中,并通过data参数进行传递
resp = requests.post(url, data=heads)
# json:Python原生支持JSON数据。Python json模块是标准库的一部分。该json模块可以将JSON数据从JSON格式转换到等效的Python对象,例如dictionary和list。JSON
# 模块还可以将Python对象转换为JSON格式。
print(resp.json())
爬取豆瓣电影排行榜
url = "https://movie.douban.com/j/chart/top_list"
# 输入参数
for a in range(0, 100, 20):
    dica = {
        "type": "24",
        "interval_id": "100:90",
        "action": "",
        "start": a,
        "limit": 20,
    }
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.1.2 Safari/537.36 JiSu/118.0.1.2Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.1.2 Safari/537.36 JiSu/118.0.1.2",
}
resp = requests.get(url=url, params=dica, headers=head)
print(resp.json())
resp.close()  # 关闭resp

正则

元字符

.  匹配除换行符以外的任意字符
\w 匹配字海或数字或下划线
\S 匹配任意的空白符
\d 匹配数字
\n 匹配一个换行符
\t 匹配一个制表符
\^ 匹配字符串的开始
\$ 匹配字符串的结尾
\W{大写} 匹配非字母或数字或下划线
\D 匹配非数字
\S{} 匹配非空白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示一个组
[ ...] 匹配字符组中的字符
[^...] 匹配除了字符组中字符的所有字符

量词

* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

贪婪匹配&惰性匹配

.* 贪婪匹配
.*? 惰性匹配

eg:

# findall: 匹配字符串中所有符合正则的内容
lst = re.findall(r"\d+", "1231123去去去")
print(lst)
# finditer: 匹配字符串中所有的内容[返回的使迭代器],获取内容需要拼接.group()
it = re.finditer(r"\d+", "1231123去去去")
for i in it:
    print(i.group())
# search,找到一个结果就返回,拿到数据拼。group
them = re.search(r"\d+", "1111112222,123123")
print(them.group())
# match 从头开始匹配,可以认为加了一个^
ii = re.match(r"\d+", "!1231123去去去")
print(ii.group())
# 预加载正则
obj = re.compile(r"\d+")
it = obj.finditer(r"\d+", "1231123去去去")
for i in it:
    print(i.group())
# (?P<组名>re) 可以单独从正则匹配的内容中获得 组名 内的数据
obj = re.compile(r"123123(?P<a2>.*?)123123", re.S)  # re.S 使”.“可以匹配换行符
a1 = obj.finditer("123123qqqqq123123123")
for a in a1:
    print(a.group("a2"))

实列:

爬取豆瓣TOP250
# 导入 request,re,csv模块
import requests
import re
import csv
# 使start以0为起始,以25为公差,275为结点(不包括275)
for start in range(0, 275, 25):
    url = f'https://movie.douban.com/top250?start={start}'
    head = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.1.2 "
                      "Safari/537.36 JiSu/118.0.1.2Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko)"
                      "Chrome/118.0.1.2 Safari/537.36 JiSu/118.0.1.2",
    }
    ress = requests.get(url, headers=head)
    a1 = ress.text
    # 构造re,提取关键点,re,S为:“.”可以匹配换行符
    obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)'
                     r'</span>.*?<div class="star">.*?<span property="v:best" content="10.0">.*?<span>'
                     r'(?P<people>.*?)</span>.*?<span class="inq">(?P<word>.*?)</span>', re.S)
    a2 = obj.finditer(a1)
    # # 使用csv 将提取到的内容追加(a+)写入csv文件内
    f = open("name.csv", 'a+', encoding='UTF-8', newline='')
    write = csv.writer(f)
    for i in a2:
        # 此处为测试用
        #     print(i.group("name"))
        #     print(i.group("people"))
        #     print(i.group("word").strip())
        dic = i.groupdict()
        dic['word'] = dic['word'].strip()
        write.writerow(dic.values())
    # 关闭程序
    f.close()
    print("over!")
相关文章
|
3天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
10天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
42 3
|
10天前
|
数据采集 API 开发者
🚀告别网络爬虫小白!urllib与requests联手,Python网络请求实战全攻略
在网络的广阔世界里,Python凭借其简洁的语法和强大的库支持,成为开发网络爬虫的首选语言。本文将通过实战案例,带你探索urllib和requests两大神器的魅力。urllib作为Python内置库,虽API稍显繁琐,但有助于理解HTTP请求本质;requests则简化了请求流程,使开发者更专注于业务逻辑。从基本的网页内容抓取到处理Cookies与Session,我们将逐一剖析,助你从爬虫新手成长为高手。
29 1
|
19天前
|
数据采集 JavaScript 前端开发
构建你的首个Python网络爬虫
【9月更文挑战第8天】本文将引导你从零开始,一步步构建属于自己的Python网络爬虫。我们将通过实际的代码示例和详细的步骤解释,让你理解网络爬虫的工作原理,并学会如何使用Python编写简单的网络爬虫。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开网络数据获取的新世界。
|
19天前
|
数据采集 机器学习/深度学习 搜索推荐
Python爬虫技术基础与应用场景详解
本文介绍了爬虫技术的基本概念、原理及应用场景,包括数据收集、价格监测、竞品分析和搜索引擎优化等。通过一个实战案例展示了如何使用Python爬取电商网站的商品信息。强调了在使用爬虫技术时需遵守法律法规和道德规范,确保数据抓取的合法性和合规性。
|
22天前
|
数据采集 JavaScript 前端开发
打造你的Python爬虫:从基础到进阶
【9月更文挑战第5天】在数字信息泛滥的时代,掌握一项技能能让我们更好地筛选和利用这些资源。本文将带你了解如何用Python构建一个基本的网页爬虫,进而拓展到更复杂的数据抓取任务。无论你是编程新手还是有一定经验的开发者,跟随这篇文章的步伐,你将能够实现自动化获取网络数据的目标。准备好了吗?让我们一起潜入代码的世界,解锁新的可能!
WK
|
26天前
|
数据采集 XML 安全
常用的Python网络爬虫库有哪些?
Python网络爬虫库种类丰富,各具特色。`requests` 和 `urllib` 简化了 HTTP 请求,`urllib3` 提供了线程安全的连接池,`httplib2` 则具备全面的客户端接口。异步库 `aiohttp` 可大幅提升数据抓取效率。
WK
38 1
|
27天前
|
数据采集 JavaScript 前端开发
构建简易Python爬虫:抓取网页数据入门指南
【8月更文挑战第31天】在数字信息的时代,数据抓取成为获取网络资源的重要手段。本文将引导你通过Python编写一个简单的网页爬虫,从零基础到实现数据抓取的全过程。我们将一起探索如何利用Python的requests库进行网络请求,使用BeautifulSoup库解析HTML文档,并最终提取出有价值的数据。无论你是编程新手还是有一定基础的开发者,这篇文章都将为你打开数据抓取的大门。
|
28天前
|
数据采集 存储 数据库
构建你的第一个Python爬虫:从入门到实践
【8月更文挑战第31天】在数字时代的浪潮中,数据如同新时代的石油,而网络爬虫则是开采这些数据的钻头。本文将引导初学者了解并实现一个基础的网络爬虫,使用Python语言,通过实际代码示例,展示如何收集和解析网页信息。我们将一起探索HTTP请求、HTML解析以及数据存储等核心概念,让你能够快速上手并运行你的首个爬虫项目。
|
27天前
|
数据采集 存储 JavaScript
Python 爬虫实战:从入门到精通
【8月更文挑战第31天】 本文将带你走进 Python 爬虫的世界,从基础的请求和解析开始,逐步深入到反爬策略的应对和数据存储。我们将通过实际案例,一步步构建一个功能完整的爬虫项目。无论你是编程新手还是有一定经验的开发者,都能在这篇文章中找到适合自己的学习路径。让我们一起探索数据的海洋,揭开网络信息的神秘面纱。