Python爬虫的简单实践

news/2024/7/19 11:14:01 标签: 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爬虫爬取电商网站的商品信息。请注意,这只是一个简单的示例,实际爬取过程中可能需要根据目标网站的具体结构和反爬虫策略进行适当的修改和优化。

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数据库中。代码思路

python">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 details

def 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.niftyadmin.cn/n/5352807.html

相关文章

【Java程序设计】【C00179】基于SSM的电影在线购票管理系统(论文+PPT)

基于SSM的电影在线购票管理系统(论文PPT) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于ssm的电影在线购票管理系统 本系统分为前台用户和后台管理员2个功能模块。 前台用户:当游客打开系统的网址后,首先看到…

04基于人工智能大模型的智慧教育应用

04基于人工智能大模型的智慧教育应用 赛题关键:AIGC教育的应用 一:确定应用方向 选取待解决的教育领域核心问题,确定产生怎么样的产品,基于大模型解决什么样的问题 可参考实例一: 高级版作业帮 基于大模型启发式…

标准库中的string类(下)——“C++”

各位CSDN的uu们你们好呀,这段时间小雅兰的内容仍然是Cstring类的使用的内容,下面,让我们进入string类的世界吧!!! string类的常用接口说明 string - C Reference string类的常用接口说明 string类对象的修…

算法每日一题: 边权重均等查询 | 公共子祖先

大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …

Android Automotive:在路上释放 Android 操作系统的力量

Android Automotive:在路上释放 Android 操作系统的力量 Android 在汽车行业的历程车载信息娱乐系统 (IVI) 的演变汽车中的 Android:演变和进步Android 汽车操作系统的崛起Polestar 2:开创 Android 汽车体验Android 开源项目 (AOSP) 及其他项…

【原神游戏开发日志3】登录和注册有何区别?

版权声明: ● 本文为“优梦创客”原创文章,您可以自由转载,但必须加入完整的版权声明 ● 文章内容不得删减、修改、演绎 ● 本文视频版本:见文末 ● 相关学习资源:见文末 前言 ● 这是我们原神游戏开发日记的第三期 ●…

C# WinForm DataTable Select异常

最近经常碰上C# WinForm DataTable Selec的一个异常。 DataGridView控件与DataTable通过INotifyPropertyChanged与数据绑定实现同步,在我通过另一个控件的事件修改DataTable之后,通过VS的对象查看器能看到DataTable已同步,但是使用Select方…

(bean的创建图)学习Spring的第十天(很重要)

大致框架按如下 第一次细分 bean对象还未创建 操作第一个map 引入BeanFactoryPostProcessor , 即Bean工厂后处理器 , 为Spring很重要的扩展点 BeanFactoryPostProcessor内部的方法 可以对BeaDefinition进行修改 , 也可进行BeanDefinition的注册 ( 原有在xml文件配置的bean…