Python-数据爬取(爬虫)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 【7月更文挑战第24天】

1.简要描述一下Python爬虫的工作原理,并介绍几个常用的Python爬虫库。
Python爬虫的工作原理
发送请求:爬虫向目标网站发送HTTP请求,通常使用GET请求来获取网页内容。
解析响应:接收并解析HTTP响应,提取出有用的数据。常用的解析方式包括HTML解析和JSON解析。
数据提取:使用解析后的数据,根据特定的规则或结构,提取所需信息。
数据存储:将提取出的数据保存到文件、数据库或其他存储系统中。
遵守规则:爬虫需要遵守目标网站的robots.txt文件中的规则,避免对服务器造成过大压力。
常用的Python爬虫库
Requests:一个简单易用的HTTP库,用于发送请求和接收响应。
BeautifulSoup:一个用于解析HTML和XML的库,可以轻松地提取网页中的数据。
Scrapy:一个功能强大的爬虫框架,提供了许多高级功能,如请求调度、数据提取和存储。
Selenium:用于模拟浏览器操作,适合处理需要JavaScript渲染的网页。
使用selenium库爬取东方财富网站股票数据信息

示例代码和过程说明
安装Selenium库:首先确保已经安装了Selenium库和对应的浏览器驱动,例如Chrome驱动(Chrome WebDriver)。

pip install selenium
导入必要的库和设置:导入Selenium库,并设置浏览器驱动的路径和目标网页URL。

from selenium import webdriver
import time

设置 Chrome 驱动程序路径

driver_path = '/path/to/chromedriver'

目标网页 URL

url = 'http://quote.eastmoney.com/center/gridlist.html#hs_a_board'
设置浏览器选项和启动WebDriver:配置Chrome浏览器选项,启动WebDriver,并打开目标网页。

设置 Chrome 浏览器选项

options = webdriver.ChromeOptions()
options.add_argument('--headless') # 无头模式运行浏览器,即不打开实际浏览器窗口
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')

启动 Chrome 浏览器

driver = webdriver.Chrome(executable_path=driver_path, options=options)

打开目标网页

driver.get(url)
模拟翻页和数据抓取:使用Selenium模拟点击下一页按钮,然后等待2秒钟加载下一页数据,并抓取页面中的股票数据。

try:
while True:

    # 等待页面加载完全
    time.sleep(2)

    # 爬取当前页面数据(这里假设抓取表格数据的过程)
    table = driver.find_element_by_css_selector('table.stock-table')

    # 处理表格数据,例如输出或者存储数据
    rows = table.find_elements_by_css_selector('tr')
    for row in rows:
        # 处理每一行数据,例如打印股票代码和名称
        cells = row.find_elements_by_css_selector('td')
        if len(cells) >= 2:
            stock_code = cells[0].text
            stock_name = cells[1].text
            print(f"股票代码: {stock_code}, 股票名称: {stock_name}")

    # 查找并点击下一页按钮
    next_button = driver.find_element_by_css_selector('a.next')
    next_button.click()

except Exception as e:
print(f"爬取过程出现异常: {str(e)}")

finally:

# 关闭浏览器驱动
driver.quit()

源码
from selenium import webdriver
import time

设置 Chrome 驱动程序路径

driver_path = '/path/to/chromedriver'

目标网页 URL

url = 'http://quote.eastmoney.com/center/gridlist.html#hs_a_board'

设置 Chrome 浏览器选项

options = webdriver.ChromeOptions()
options.add_argument('--headless') # 无头模式运行浏览器,即不打开实际浏览器窗口
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')

启动 Chrome 浏览器

driver = webdriver.Chrome(executable_path=driver_path, options=options)

try:

# 打开目标网页
driver.get(url)

while True:
    # 等待页面加载完全
    time.sleep(2)

    # 爬取当前页面数据(这里假设抓取表格数据的过程)
    table = driver.find_element_by_css_selector('table.stock-table')

    # 处理表格数据,例如输出或者存储数据
    rows = table.find_elements_by_css_selector('tr')
    for row in rows:
        # 处理每一行数据,例如打印股票代码和名称
        cells = row.find_elements_by_css_selector('td')
        if len(cells) >= 2:
            stock_code = cells[0].text
            stock_name = cells[1].text
            print(f"股票代码: {stock_code}, 股票名称: {stock_name}")

    # 查找并点击下一页按钮
    next_button = driver.find_element_by_css_selector('a.next')
    next_button.click()

except Exception as e:
print(f"爬取过程出现异常: {str(e)}")

finally:

# 关闭浏览器驱动
driver.quit()

过程说明
设置浏览器选项和启动WebDriver:通过设置ChromeOptions来配置Chrome浏览器的参数,包括无头模式等,然后启动Chrome浏览器。

模拟翻页和数据抓取:使用一个while循环,不断查找并点击页面的下一页按钮(假设为CSS选择器a.next),然后等待2秒钟(使用time.sleep(2))加载下一页数据。在每一页加载完成后,使用Selenium的方法找到表格元素(假设为CSS选择器table.stock-table),然后逐行抓取并处理股票数据。

异常处理和浏览器关闭:使用try-except语句捕获可能出现的异常,并在最后通过driver.quit()关闭浏览器驱动,确保资源释放。

2.Scrapy 框架的基本结构和工作流程是怎样的?
Scrapy 框架的基本结构
项目结构:Scrapy项目包含多个文件和目录,如spiders(存放爬虫代码)、items(定义数据结构)、pipelines(处理提取的数据)、settings(项目配置)等。
Spiders:定义爬虫的核心部分,负责发送请求和解析响应。
Items:定义数据结构,用于存储爬取的数据。
Pipelines:处理提取的数据,可以进行清洗、验证和存储等操作。
Middlewares:中间件,用于处理请求和响应的过程,类似于过滤器。
Scrapy 工作流程
启动爬虫:Scrapy启动后,加载配置和爬虫类。
发送请求:爬虫类发送初始请求(通常是start_urls列表中的URL)。
解析响应:收到响应后,调用爬虫类中的解析方法(如parse),提取数据和生成新的请求。
生成新的请求:解析方法可以生成新的请求,这些请求会被放入调度器中,等待执行。
处理数据:提取到的数据会被传递到pipelines进行进一步处理,如清洗和存储。
Scrapy 示例
下面是一个简单的Scrapy爬虫示例,它爬取一个示例网站的标题和链接。

创建Scrapy项目:

scrapy startproject example
定义数据结构(example/items.py):

import scrapy

class ExampleItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
创建爬虫类(example/spiders/example_spider.py):

import scrapy
from example.items import ExampleItem

class ExampleSpider(scrapy.Spider):
name = "example"
start_urls = ['http://example.com']

def parse(self, response):
    for item in response.css('div.item'):
        example_item = ExampleItem()
        example_item['title'] = item.css('a.title::text').get()
        example_item['link'] = item.css('a::attr(href)').get()
        yield example_item

配置pipelines(example/settings.py):

ITEM_PIPELINES = {
'example.pipelines.ExamplePipeline': 300,
}
定义pipelines(example/pipelines.py):

class ExamplePipeline:
def process_item(self, item, spider):

    # 这里可以进行数据清洗和存储
    print(f"Title: {item['title']}, Link: {item['link']}")
    return item

运行爬虫:

scrapy crawl example
这个爬虫会访问http://example.com,提取每个div.item中的标题和链接,并将其输出。
原文链接:https://blog.csdn.net/m0_74940474/article/details/140381034

相关文章
|
1天前
|
数据采集 存储 数据挖掘
深入剖析 Python 爬虫:淘宝商品详情数据抓取
深入剖析 Python 爬虫:淘宝商品详情数据抓取
|
1天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
22 12
|
3天前
|
数据采集 JSON Java
Java爬虫获取微店快递费用item_fee API接口数据实现
本文介绍如何使用Java开发爬虫程序,通过微店API接口获取商品快递费用(item_fee)数据。主要内容包括:微店API接口的使用方法、Java爬虫技术背景、需求分析和技术选型。具体实现步骤为:发送HTTP请求获取数据、解析JSON格式的响应并提取快递费用信息,最后将结果存储到本地文件中。文中还提供了完整的代码示例,并提醒开发者注意授权令牌、接口频率限制及数据合法性等问题。
|
4天前
|
存储 数据采集 数据库
Python爬虫实战:股票分时数据抓取与存储
Python爬虫实战:股票分时数据抓取与存储
|
6天前
|
数据采集 数据安全/隐私保护 Python
从零开始:用Python爬取网站的汽车品牌和价格数据
在现代化办公室中,工程师小李和产品经理小张讨论如何获取懂车帝网站的汽车品牌和价格数据。小李提出使用Python编写爬虫,并通过亿牛云爬虫代理避免被封禁。代码实现包括设置代理、请求头、解析网页内容、多线程爬取等步骤,确保高效且稳定地抓取数据。小张表示理解并准备按照指导操作。
从零开始:用Python爬取网站的汽车品牌和价格数据
|
8天前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
30天前
|
数据采集 JSON 数据格式
Python爬虫:京东商品评论内容
京东商品评论接口为商家和消费者提供了重要工具。商家可分析评论优化产品,消费者则依赖评论做出购买决策。该接口通过HTTP请求获取评论内容、时间、点赞数等数据,支持分页和筛选好评、中评、差评。Python示例代码展示了如何调用接口并处理返回的JSON数据。应用场景包括产品优化、消费者决策辅助、市场竞争分析及舆情监测。
|
1月前
|
数据采集 Web App开发 数据可视化
Python用代理IP获取抖音电商达人主播数据
在当今数字化时代,电商直播成为重要的销售模式,抖音电商汇聚了众多达人主播。了解这些主播的数据对于品牌和商家至关重要。然而,直接从平台获取数据并非易事。本文介绍如何使用Python和代理IP高效抓取抖音电商达人主播的关键数据,包括主播昵称、ID、直播间链接、观看人数、点赞数和商品列表等。通过环境准备、代码实战及数据处理与可视化,最终实现定时任务自动化抓取,为企业决策提供有力支持。
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
89 3
|
2月前
|
数据采集 存储 XML
python实战——使用代理IP批量获取手机类电商数据
本文介绍了如何使用代理IP批量获取华为荣耀Magic7 Pro手机在电商网站的商品数据,包括名称、价格、销量和用户评价等。通过Python实现自动化采集,并存储到本地文件中。使用青果网络的代理IP服务,可以提高数据采集的安全性和效率,确保数据的多样性和准确性。文中详细描述了准备工作、API鉴权、代理授权及获取接口的过程,并提供了代码示例,帮助读者快速上手。手机数据来源为京东(item.jd.com),代理IP资源来自青果网络(qg.net)。

热门文章

最新文章

推荐镜像

更多