网络爬虫入门

news2025/1/10 18:05:30

        爬虫(也被称为网络爬虫或网络蜘蛛)是一种自动化程序,它可以在互联网上自动抓取数据。爬虫的基本工作原理通常包括以下几个步骤:发送请求:爬虫向目标网站发送HTTP请求,请求网页内容。接收响应:爬虫接收网站返回的响应,这通常包括网页的HTML代码、CSS样式、JavaScript脚本等内容。解析内容:爬虫使用解析器对接收到的网页内容进行解析,提取出需要的数据。存储数据:爬虫将提取出的数据存储到本地文件或数据库中,以便后续分析和使用。

        在Python中,有许多强大的库可以帮助你快速开发爬虫,如requests、beautifulsoup4、scrapy等。requests库用于发送HTTP请求和接收响应;beautifulsoup4库用于解析HTML和XML文档;scrapy是一个用于构建爬虫的框架,它提供了完整的爬虫开发流程支持。

        以下是使用requests库发送HTTP请求,并使用BeautifulSoup库解析HTML内容。这个示例将爬取一个网页的标题,并打印出来。首先,你需要安装requestsbeautifulsoup4库。你可以使用pip来安装:

bash复制代码
 pip install requests beautifulsoup4

然后,你可以编写以下Python代码:

python复制代码
 import requests
 from bs4 import BeautifulSoup
  
 # 目标网页的URL
 url = 'https://example.com'
  
 # 发送GET请求
 response = requests.get(url)
  
 # 检查请求是否成功
 if response.status_code == 200:
 # 解析网页内容
 soup = BeautifulSoup(response.text, 'html.parser')
  
 # 查找网页标题,通常位于<title>标签内
 title = soup.title.string
  
 # 打印网页标题
 print(f"网页标题: {title}")
 else:
 print(f"请求失败,状态码: {response.status_code}")

        请将url变量替换为你想爬取的网页的URL。这个示例假设网页的标题位于<title>标签内,这是大多数HTML页面的标准做法。

# -*- codeing = utf-8 -*-
from bs4 import BeautifulSoup  # 网页解析,获取数据
import re  # 正则表达式,进行文字匹配`
import urllib.request, urllib.error  # 制定URL,获取网页数据
import xlwt  # 进行excel操作
#import sqlite3  # 进行SQLite数据库操作

findLink = re.compile(r'<a href="(.*?)">')  # 创建正则表达式对象,标售规则   影片详情链接的规则
findImgSrc = re.compile(r'<img.*src="(.*?)"', re.S)
findTitle = re.compile(r'<span class="title">(.*)</span>')
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')
findJudge = re.compile(r'<span>(\d*)人评价</span>')
findInq = re.compile(r'<span class="inq">(.*)</span>')
findBd = re.compile(r'<p class="">(.*?)</p>', re.S)




def main():
    baseurl = "https://movie.douban.com/top250?start="  #要爬取的网页链接
    # 1.爬取网页
    datalist = getData(baseurl)
    savepath = "豆瓣电影Top250.xls"    #当前目录新建XLS,存储进去
    # dbpath = "movie.db"              #当前目录新建数据库,存储进去
    # 3.保存数据
    saveData(datalist,savepath)      #2种存储方式可以只选择一种
    # saveData2DB(datalist,dbpath)



# 爬取网页
def getData(baseurl):
    datalist = []  #用来存储爬取的网页信息
    for i in range(0, 10):  # 调用获取页面信息的函数,10次
        url = baseurl + str(i * 25)
        html = askURL(url)  # 保存获取到的网页源码
        # 2.逐一解析数据
        soup = BeautifulSoup(html, "html.parser")
        for item in soup.find_all('div', class_="item"):  # 查找符合要求的字符串
            data = []  # 保存一部电影所有信息
            item = str(item)
            link = re.findall(findLink, item)[0]  # 通过正则表达式查找
            data.append(link)
            imgSrc = re.findall(findImgSrc, item)[0]
            data.append(imgSrc)
            titles = re.findall(findTitle, item)
            if (len(titles) == 2):
                ctitle = titles[0]
                data.append(ctitle)
                otitle = titles[1].replace("/", "")  #消除转义字符
                data.append(otitle)
            else:
                data.append(titles[0])
                data.append(' ')
            rating = re.findall(findRating, item)[0]
            data.append(rating)
            judgeNum = re.findall(findJudge, item)[0]
            data.append(judgeNum)
            inq = re.findall(findInq, item)
            if len(inq) != 0:
                inq = inq[0].replace("。", "")
                data.append(inq)
            else:
                data.append(" ")
            bd = re.findall(findBd, item)[0]
            bd = re.sub('<br(\s+)?/>(\s+)?', "", bd)
            bd = re.sub('/', "", bd)
            data.append(bd.strip())
            datalist.append(data)

    return datalist


# 得到指定一个URL的网页内容
def askURL(url):
    head = {  # 模拟浏览器头部信息,向豆瓣服务器发送消息
        "User-Agent": "Mozilla / 5.0(Windows NT 10.0; Win64; x64) AppleWebKit / 537.36(KHTML, like Gecko) Chrome / 80.0.3987.122  Safari / 537.36"
    }
    # 用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

    request = urllib.request.Request(url, headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
    except urllib.error.URLError as e:
        if hasattr(e, "code"):
            print(e.code)
        if hasattr(e, "reason"):
            print(e.reason)
    return html


# 保存数据到表格
def saveData(datalist,savepath):
    print("save.......")
    book = xlwt.Workbook(encoding="utf-8",style_compression=0) #创建workbook对象
    sheet = book.add_sheet('豆瓣电影Top250', cell_overwrite_ok=True) #创建工作表
    col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")
    for i in range(0,8):
        sheet.write(0,i,col[i])  #列名
    for i in range(0,250):
        # print("第%d条" %(i+1))       #输出语句,用来测试
        data = datalist[i]
        for j in range(0,8):
            sheet.write(i+1,j,data[j])  #数据
    book.save(savepath) #保存

# def saveData2DB(datalist,dbpath):
#     init_db(dbpath)
#     conn = sqlite3.connect(dbpath)
#     cur = conn.cursor()
#     for data in datalist:
#             for index in range(len(data)):
#                 if index == 4 or index == 5:
#                     continue
#                 data[index] = '"'+data[index]+'"'
#             sql = '''
#                     insert into movie250(
#                     info_link,pic_link,cname,ename,score,rated,instroduction,info)
#                     values (%s)'''%",".join(data)
#             # print(sql)     #输出查询语句,用来测试
#             cur.execute(sql)
#             conn.commit()
#     cur.close
#     conn.close()


# def init_db(dbpath):
#     sql = '''
#         create table movie250(
#         id integer  primary  key autoincrement,
#         info_link text,
#         pic_link text,
#         cname varchar,
#         ename varchar ,
#         score numeric,
#         rated numeric,
#         instroduction text,
#         info text
#         )
#
#
#     '''  #创建数据表
#     conn = sqlite3.connect(dbpath)
#     cursor = conn.cursor()
#     cursor.execute(sql)
#     conn.commit()
#     conn.close()

# 保存数据到数据库







if __name__ == "__main__":  # 当程序执行时
    # 调用函数
     main()
    # init_db("movietest.db")
     print("爬取完毕!")


爬取数据如下:793020111b034fcca10c3cf9a4f3d37d.png

0f834cac79f043d3a61e65e8a91dfea8.jpeg

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1604688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring AOP的实现方式与原理

目录 认识IOC与AOP AOP的实现方式 Aspect注解实现AOP 自定义注解实现AOP Spring AOP原理 代理模式 静态代理和动态代理 JDK动态代理 CGLIB动态代理 Spring AOP实现的哪种代理 认识IOC与AOP IOC又称为控制反转,也就是控制权发生了反转.在传统的程序中,我们是需要自己…

TCP/IP协议—HTTP

TCP/IP协议—HTTP HTTP协议HTTP通讯特点HTTP通讯流程 HTTP请求报文请求方法 HTTP应答报文状态码 HTTP协议 超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff0c;HTTP&#xff09;是一种请求-响应的协议&#xff0c;用户可以通过HTTP向服务器上传、下载数据。HT…

美易官方:人民币国际支付占比升至近5%

随着全球金融市场的不断发展和数字化进程的加速&#xff0c;人民币的国际支付地位逐渐提升&#xff0c;成为备受瞩目的焦点。最近的数据显示&#xff0c;人民币在国际支付中的占比已经升至近5%&#xff0c;自11月以来已成为第四大交易货币。这一变化不仅反映了中国经济的崛起和…

AI实景无人直播自动卖卷系统,开创了实体商家直播自运营先河。

AI实景无人直播自动卖卷系统&#xff0c;开创了实体商家直播自运营先河。 从当下这一刻起&#xff0c;拒绝内耗&#xff0c;做行动的巨人。因为&#xff0c;命运不会偏袒任何人&#xff0c;却会眷顾一直朝着光亮前进的人。 《人民日报》 随着新媒体的快速发展&#xff0c;很…

使用Flask和Flask-JWT-Extended保护API免受跨站请求攻击

在本文中&#xff0c;我们将探讨如何使用Flask和Flask-JWT-Extended库来保护您的API免受跨站请求攻击&#xff08;CSRF&#xff09;。我们将首先简要介绍CSRF攻击的概念&#xff0c;然后详细说明如何使用Flask-JWT-Extended库来保护您的API。 什么是跨站请求攻击&#xff08;C…

STM32学习和实践笔记(15):STM32中断系统

中断概念 CPU执行程序时&#xff0c;由于发生了某种随机的事件(外部或内部)&#xff0c;引起CPU暂 时中断正在运行的程序&#xff0c;转去执行一段特殊的服务程序(中断服务子程序 或中断处理程序)&#xff0c;以处理该事件&#xff0c;该事件处理完后又返回被中断的程序 继…

HP ProLiant DL380 Gen9 服务器 BIOS 中文设置教程

HP ProLiant DL380 Gen9 服务器 BIOS 中文设置教程 服务器开机,按F9,进入System Utilities 找到Select Language,目前设置的为English 英文 选中Select Language,按回车键 将语言由English改成中文(简体) 可以看到 中文字符 按回车键进行保存

量子AI“新高峰”:探索量子机器学习的两大最新成就——

量子力学与机器运行速度远超现今最先进超级计算机的概念结合在一起&#xff0c;令人着迷。从这个角度来看&#xff0c;量子计算机的效率可与一级方程式赛车相比&#xff0c;而传统计算机则仿佛蚂蚁般缓慢。最近&#xff0c;生成式人工智能及其卓越的机器学习能力引发了广泛讨论…

C# Solidworks二次开发:程序工具界面和选项相关API详解

大家好&#xff0c;今天要讲的是关于程序工具相关的API介绍。 下面是要介绍的API: (1)第一个为GetAutoPartSimplification&#xff0c;这个API的含义为获取简化配置的指针&#xff0c;下面是官方具体解释&#xff1a; 其输入参数的类型在上一篇文章中已经介绍过了gtError_e&a…

ZYNQ-Vitis(SDK)裸机开发之(四)PS端MIO和EMIO的使用

目录 一、ZYNQ中MIO和EMIO简介 二、Vivado中搭建block design 1.配置PS端MIO&#xff1a; 2.配置PS端EMIO&#xff1a; 三、Vitis中新建工程进行GPIO控制 1. GPIO操作头文件gpio_hdl.h&#xff1a; 2.GPIO操作源文件gpio_hdl.c&#xff1a; 3.main函数进行调用 例程开发…

吃鸡游戏msvcp140.dll丢失的解决方法

msvcp140.dll 是一个与 Microsoft Visual C Redistributable 相关的动态链接库&#xff08;DLL&#xff09;文件&#xff0c;是 Windows 操作系统中众多应用程序正常运行所必需的关键组件之一。以下是对 msvcp140.dll 文件的总体介绍和msvcp140.dll丢失的多个解决方案分享。 *…

预付费水电表系统厂家怎么选择?

1.预付费水电表系统概述 预付费水电表系统是一种现代化的计量和管理系统&#xff0c;它颠覆了传统的后付费模式&#xff0c;用户需预先支付费用才能使用水电&#xff0c;大大提高了物业管理和用户缴费的效率。该系统主要由智能电表、水表和集中控制管理系统三大部分组成。 2.…

【创建型模式】建造者模式

一、建造者模式概述 建造者模式定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同得表示。(对象创建型模式)。 建造者模式分析&#xff1a; 1.将客户端与包含多个部件得复杂对象得创建过程分离&#xff0c;客户端无需知道复杂对象…

TCP/IP 协议栈在 Linux 内核中的 运行时序分析

1、Linux内核概述 1.1 Linux内核结构 一个完整的Linux内核一般由5部分组成&#xff0c;它们分别是内存管理、进程管理、进程间通信、bai虚拟文件系统和网络接口。 1、内存管理 内存管理主要完成的是如何合理有效地管理整个系统的物理内存&#xff0c;同时快速响应内核各个子…

SQL Serve---嵌套查询

定义 嵌套查询&#xff1a;主要用于复杂的查询中。在SQL语言中&#xff0c;一个Select From Where语句称为一个查询块&#xff0c;将一个查询块嵌套在另一个查询的Where子句或Having短语中的查询称为嵌套查询。 子查询的类型 使用别名的子查询 使用IN和NOT IN的子查询 使用比较…

Modelsim自动化仿真脚本(TCL)——简单实例

目录 1. Modelsim与TCL脚本的关系 2.实验文件 2.1设计文件 2.2仿真测试文件 2.3. 脚本文件 3. 实验步骤 3.1. 创建文件夹 3.2. 指定路径 3.3. 创建工程 3.4. 运行命令 3.4. 实验效果 1. Modelsim与TCL脚本的关系 TCL&#xff08;Tool Command Language&#xff09;是…

基于机器学习的人脸发型推荐算法研究与应用实现

1.摘要 本文主要研究内容是开发一种发型推荐系统&#xff0c;旨在识别用户的面部形状&#xff0c;并根据此形状推荐最适合的发型。首先&#xff0c;收集具有各种面部形状的用户照片&#xff0c;并标记它们的脸型&#xff0c;如长形、圆形、椭圆形、心形或方形。接着构建一个面部…

我到底应该先学python还是C++?

根据你的情况&#xff0c;我还是建议你继续用Python&#xff0c;因为中学阶段最应该死磕的是算法。 也不需要精通Python&#xff0c;因为编程语言只是工具&#xff0c;能够熟练使用就可以了&#xff0c;而且现在信息学竞赛几乎都已经支持Python了&#xff0c;C已经不是必选项了…

宿舍预付费电控系统

1.系统概述 宿舍预付费电控系统是一种现代化的电力管理解决方案&#xff0c;旨在提高校园或公寓楼的能源效率&#xff0c;同时确保公平、透明的用电管理。通过预付费模式&#xff0c;用户需先充值后用电&#xff0c;避免了后期收费的困扰&#xff0c;也鼓励了节能行为。 2.功…

LangChain LangServe 学习笔记

LangChain LangServe 学习笔记 0. 引言1. LangServe 概述2. 特性3. 限制4. 安装5. 示例应用程序6. OpenAPI文档7. Python SDK 客户端8. Playground9. 聊天可运行页面 0. 引言 使用 LangServe 可以立即将您的LLM应用程序变成 API 服务器。 LangServe 使用 FastAPI 构建&#x…