Python爬虫的简单实践

Python爬虫的简单实践

案例:爬取电商网站商品信息

目标网站:假设我们想要爬取一个电商网站上的商品信息,包括商品名称、价格、评论数量等。

实现过程:

  1. 网页请求:使用Python的请求库(例如Requests)发送HTTP请求,获取目标网页的HTML内容。
  2. 网页解析:使用HTML解析库(例如BeautifulSoup、lxml)对网页进行解析,提取出所需的数据。
  3. 数据抓取:根据网页结构和标签选择器,通过解析库提供的API方法,定位和提取商品信息的HTML元素。
  4. 数据处理:对抓取到的数据进行处理和清洗,例如去除多余的空格、转换数据类型等。
  5. 数据存储:将处理后的数据存储到适当的位置,如数据库、CSV文件或Excel表格。
  6. 反爬虫处理:如果目标网站采取了反爬虫策略,我们可能需要使用一些技术手段来绕过,例如设置请求头、使用代理IP、模拟登录等。

技术涉及:

  • Web请求和响应处理:使用Requests库发送HTTP请求,获取网页内容,并处理响应状态码、Cookie等信息。
  • HTML解析:使用HTML解析库(如BeautifulSoup、lxml)解析网页HTML内容,提取所需的数据。
  • 数据清洗和处理:使用字符串处理和正则表达式等技术,对抓取到的数据进行清洗和处理。
  • 数据存储:使用数据库(如MySQL、MongoDB)、文件(如CSV、Excel)、缓存(如Redis)等方式存储抓取到的数据。
  • 反爬虫策略绕过:根据目标网站采取的反爬虫策略,使用技术手段绕过,如设置请求头、使用代理IP、模拟登录等。

值得注意的是,爬取网站数据时需要遵守网站的爬虫规则和法律法规,避免对目标网站造成过大的负荷或侵犯法律。在实际开发中,还应注意处理异常情况、优化爬虫效率、使用合理的并发机制等。

下面是简单的爬虫demo,演示了如何使用Python爬虫爬取电商网站的商品信息。请注意,这只是一个简单的示例,实际爬取过程中可能需要根据目标网站的具体结构和反爬虫策略进行适当的修改和优化。

import requests
from bs4 import BeautifulSoup# 目标网页的URL
url = 'https://www.example.com/products'# 发送HTTP请求,获取网页内容
response = requests.get(url)# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')# 定位商品信息的HTML元素,提取商品名称和价格
product_elements = soup.find_all('div', class_='product')
for product_element in product_elements:name = product_element.find('h2').text.strip()price = product_element.find('span', class_='price').text.strip()print('商品名称:', name)print('价格:', price)print('---')

上述代码的主要步骤如下:

  1. 使用requests库发送HTTP请求,获取目标网页的HTML内容。
  2. 使用BeautifulSoup库对网页内容进行解析,创建一个BeautifulSoup对象soup
  3. 使用soup对象的find_all方法定位商品信息的HTML元素,这里使用了div标签和class属性进行定位。
  4. 遍历商品元素列表,对每个商品元素使用find方法定位商品名称和价格的HTML元素,并提取对应的文本内容。
  5. 打印商品名称和价格。

实际爬取过程中还需要考虑异常处理、反爬虫策略绕过、数据清洗和存储等方面的问题。此外,对于大规模爬取和并发请求,还需要使用合适的技术手段进行优化,如使用线程池、设置请求头、使用代理IP等。

下面是一个更复杂的爬虫代码案例,演示了如何使用Python爬取豆瓣电影的信息,并将数据存储到MongoDB数据库中。代码思路

import requests
from bs4 import BeautifulSoup
from pymongo import MongoClient# MongoDB数据库连接配置
client = MongoClient('mongodb://localhost:27017/')
db = client['douban']
collection = db['movies']# 目标网页的URL
url = 'https://movie.douban.com/top250'def scrape_movie_details(url):# 发送HTTP请求,获取网页内容response = requests.get(url)soup = BeautifulSoup(response.text, 'html.parser')# 解析电影详情页的信息details = {}details['title'] = soup.find('h1').text.strip()details['rating'] = soup.find('strong', class_='ll rating_num').text.strip()details['director'] = soup.find('span', class_='attrs').find('a').text.strip()details['actors'] = [actor.text.strip() for actor in soup.find_all('a', class_='actor')]details['summary'] = soup.find('span', property='v:summary').text.strip()return detailsdef scrape_top_movies():# 存储所有电影的信息all_movies = []# 爬取豆瓣电影Top250的每页数据for page in range(0, 250, 25):page_url = f'{url}?start={page}'response = requests.get(page_url)soup = BeautifulSoup(response.text, 'html.parser')# 解析每页中的电影列表movie_elements = soup.find_all('div', class_='info')for movie_element in movie_elements:# 解析电影标题和详情页链接title_element = movie_element.find('span', class_='title')title = title_element.text.strip()details_url = movie_element.find('a')['href']# 爬取电影详情页信息details = scrape_movie_details(details_url)details['title'] = title# 将电影信息添加到列表中all_movies.append(details)return all_movies# 爬取豆瓣电影Top250的信息
movies = scrape_top_movies()# 将电影信息存储到MongoDB数据库
collection.insert_many(movies)

上述代码的主要步骤如下:

  1. 使用requests库发送HTTP请求,获取豆瓣电影Top250的网页内容。
  2. 使用BeautifulSoup库解析网页内容,定位电影列表的HTML元素。
  3. 遍历电影列表,提取每部电影的标题和详情页链接。
  4. 对于每部电影,发送HTTP请求获取其详情页的内容,并使用BeautifulSoup解析详情页。
  5. 解析电影详情页,提取电影的标题、评分、导演、演员和简介等信息。
  6. 将电影的详细信息存储在字典对象details中。
  7. 将每部电影的详细信息添加到列表all_movies中。
  8. 最后,将all_movies中的电影信息批量存储到MongoDB数据库中。

具体爬取过程中可能需要根据目标网站的具体情况进行适当的修改和优化。

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

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

相关文章

BUUCTF-Real-[PHP]XXE

目录 1、原理 2、XXE漏洞产生的原因 3、开始复现 paylaod 复现 4、flag 1、原理 XML数据在传输过程中,攻击者强制XML解析器去访问攻击者指定的资源内容(本地/远程),外部实体声明关键字SYSTEM会令XML解析器读取数据&#xf…

洛谷P1162填涂颜色

填涂颜色 题目描述 由数字 0 0 0 组成的方阵中,有一任意形状的由数字 1 1 1 构成的闭合圈。现要求把闭合圈内的所有空间都填写成 2 2 2。例如: 6 6 6\times 6 66 的方阵( n 6 n6 n6),涂色前和涂色后的方阵如下&…

在前端开发中,常见的数组循环方式有以下几种:

在前端开发中&#xff0c;常见的数组循环方式有以下几种&#xff1a; for 循环&#xff1a;使用最传统的 for 循环来遍历数组元素。 const array [1, 2, 3, 4, 5];for (let i 0; i < array.length; i) {console.log(array[i]); }forEach() 方法&#xff1a;使用数组的 …

【Axure教程0基础入门】00Axure9汉化版下载、安装、汉化、注册+01制作线框图

写在前面&#xff1a;在哔哩哔哩上面找到的Axure自学教程0基础入门课程&#xff0c;播放量最高&#xff0c;5个多小时。课程主要分为4个部分&#xff0c;快速入门、动态面板、常用动效、项目设计。UP主账号【Song老师产品经理课堂】。做个有素质的白嫖er&#xff0c;一键三连必…

【C/C++】深入理解--函数重载(什么是函数重载?为什么要有函数重载?)

目录 一、前言 二、 函数重载 &#x1f34e;什么是函数重载 &#x1f350;函数重载的条件 &#x1f347;函数重载的注意点 &#x1f349;为什么要有函数重载 &#x1f353;为何C语言不支持函数重载&#xff0c;反倒C可以&#xff1f; &#x1f4a6; Linux环境下演示函数重…

Python常用库

一、爬虫 Requests&#xff1a;是一个Python HTTP库&#xff0c;可以用于发送HTTP请求&#xff0c;支持HTTP/1.1和HTTP/2&#xff0c;适合于爬取简单的网页。 BeautifulSoup&#xff1a;是一个HTML/XML解析库&#xff0c;可以用于解析网页内容&#xff0c;提取出需要的信息。…

Cocos creator 动作系统

动作系统简介 是用于控制物体运动的一套系统&#xff0c;完全依赖代码进行实现&#xff0c;动态调节节点的移动。 移动 cc.moveTo 移动到某个坐标&#xff08;x,y&#xff09; //1秒时间内&#xff0c;移动到0,0let action1 cc.moveTo(1,0,0)this.node.runAction(action1)c…

基于单片机的烟草干燥温度控制系统设计

摘 要&#xff1a;烟草干燥研究一直备受国内外烟草工作者的重视&#xff0c;在烟草干燥的方法中热风管处理法是利用热空气对流使烟草达到干燥的效果&#xff0c;这样可以控制烟草干燥时的温度&#xff0c;使烟草能够更好更快地干燥&#xff0c;因此温度的检测和控制是很重要的。…

LeetCode 第二十一天

530. 二叉搜索树的最小绝对差 注意掌握中序遍历的迭代写法。 class Solution { public:int preValue -1;int MinAbs INT_MAX;void traversal(TreeNode* root){// 第一次写出新的递归题目 耶耶耶if (root nullptr) return;traversal(root->left);// 上一章卡尔给出的好方…

写静态页面——浮动练习

0、效果&#xff1a; 1、html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>浮动…

Mongodb投射中的$slice,正向反向跳过要搞清楚

在投射中&#xff0c;使用$操作符和$elemMatch返回数组中第一个符合查询条件的元素。而在投射中使用$slice, 能够返回指定数量的数组元素。 定义 投射中使用$slice命令&#xff0c;指定查询结果中返回数组元素的数量。 语法 db.collection.find(<query>,{<arrayFi…

C++-类和对象(2)

目录 5.类的作用域 6.类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 1.对象中包含类的各个成员 ​编辑 2.代码只保存一份&#xff0c;在对象中保存存放代码的地址 ​编辑 3.只保存成员变量&#xff0c;成员函数存放在公共的代码段 ​编辑…

C++进阶(八)红黑树

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、红黑树的概念二、红黑树的性质三、红黑树结构四、红黑树的插入操作1、情况一2、情况二3、…

stm32--simulink开发之--timer的学习

总体的参考链接是&#xff1a; https://ww2.mathworks.cn/help/ecoder/stmicroelectronicsstm32f4discovery/ref/timer.html 输入&#xff1a; 1&#xff0c;配置项&#xff1a;Enable frequency input 缩写&#xff1a;freq conunt 说明&#xff1a;“freq count — Frequency…

【C++】构造函数和析构函数详解

目录 前言 类中的六个默认成员函数 构造函数 概念 特性 析构函数 概念 特性&#xff1a; 前言 类中的六个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编…

Python爬虫学习之scrapy库

一、scrapy库安装 pip install scrapy -i https://pypi.douban.com/simple 二、scrapy项目的创建 1、创建爬虫项目 打开cmd 输入scrapy startproject 项目的名字 注意:项目的名字不允许使用数字开头 也不能包含中文 2、创建爬虫文件 要在spiders文件…

qt setStyleSheet 设置多个属性{}之间用空格间隔

setStyleSheet 设置多个属性时&#xff0c;大属性之间不能用分号&#xff0c;用 空格进行间隔 pbtn1->setStyleSheet("QPushButton {background-color: rgb(4,138,224);font: bold 12pt;color: rgb(255,255,255);} QPushButton:hover,QPushButton:pushed {background-…

GPT等大语言模型是典型的人机环境交互、协同系统

GPT等大语言模型是一种典型的人机环境交互、协同系统&#xff0c;同时也是一种基于Transformer模型的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;使用了大规模的无监督预训练和有监督微调的方法进行训练。通过预训练和微调的方式来生成文本。GPT能够根据输入的文…

【Cookie反爬虫】某采购网站动态Cookie加点选验证码校验分析与实战

文章目录 1. 写在前面2. 请求分析3. JS反混淆4. 深度分析 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

字符串转换const char* , char*,QByteArray,QString,string相互转换,支持中文

文章目录 1.char * 与 const char * 的转换2.QByteArray 与 char* 的转换3.QString 与 QByteArray 的转换4.QString 与 string 的转换5.QString与const string 的转换6.QString 与 char* 的转换 在开发中&#xff0c;经常会遇到需要将数据类型进行转换的情况&#xff0c;下面依…