首页 > 编程语言 >python实现简单的爬虫功能

python实现简单的爬虫功能

时间:2023-08-08 14:55:34浏览次数:38  
标签:title python text price 爬虫 item HTML 简单 data

前言
Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序。在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例。

如何实现简单的爬虫
1. 导入必要的库和模块
在编写Python爬虫时,我们需要使用许多库和模块,其中最重要的是requests和BeautifulSoup。Requests库可以帮助我们发送HTTP请求,并从网站上获取数据,而BeautifulSoup可以帮助我们从HTML文件中提取所需的信息。因此,我们需要首先导入这两个库。

import requests
from bs4 import BeautifulSoup

 

2. 发送HTTP请求
在爬虫程序中,我们需要向网站发送HTTP请求,通常使用GET方法。Requests库提供了一个get()函数,我们可以使用它来获取网站的HTML文件。这个函数需要一个网站的URL作为参数,并返回一个包含HTML文件的响应对象。我们可以使用text属性来访问HTML文件的文本内容。

url = "https://www.example.com"
response = requests.get(url)
html = response.text

 


在发送HTTP请求时,我们需要注意是否需要添加用户代理和头信息。有些网站会检查用户代理和头信息,如果没有正确的值,它们就会拒绝我们的请求。为了避免这种情况,我们可以在HTTP请求中添加用户代理和头信息。我们可以使用requests库的headers选项来添加头信息。

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}

response = requests.get(url, headers=headers)

 

3. 解析HTML文件
在获取了网站的HTML文件之后,我们需要从中提取我们想要的信息。为此,我们需要使用BeautifulSoup库,它提供了许多强大的函数和方法,可以轻松地解析HTML文件。

我们可以使用BeautifulSoup函数将HTML文件转换为BeautifulSoup对象。然后,我们可以使用find()、find_all()等方法来查找HTML文件中的元素。这些方法需要一个标签名称作为参数,并返回一个包含所选元素的列表或单个元素。

soup = BeautifulSoup(html, "html.parser")
title = soup.find("title").text

 


为了从HTML文件中提取更多的信息,我们需要了解CSS选择器。CSS选择器是一种用于选择HTML元素的语法,类似于CSS中的样式选择器。我们可以使用CSS选择器来获取HTML文件中特定元素的信息。例如,我们可以使用select()方法和一个CSS选择器来选择一个类别的所有元素。

items = soup.select(".item")
for item in items:
    title = item.select(".title")[0].text
    price = item.select(".price")[0].text

 

4. 存储数据
在爬取数据后,我们可能需要将数据存储到本地文件或数据库中。Python提供了许多方式来实现这一点,例如使用CSV、JSON或SQLite等格式来存储数据。

如果我们要将数据保存到CSV文件中,我们可以使用csv库。这个库提供了一个writer()函数,我们可以使用它来创建一个CSV写入器。然后,我们可以使用writerow()方法向CSV文件中写入数据。

import csv

with open("data.csv", "w", newline="") as file:
    writer = csv.writer(file)
    writer.writerow(["Title", "Price"])
    for item in items:
        title = item.select(".title")[0].text
        price = item.select(".price")[0].text
        writer.writerow([title, price])

 

如果我们要将数据保存到SQLite数据库中,我们可以使用sqlite3库。这个库提供了一个链接到数据库的函数connect()和一个游标对象,我们可以使用它来执行SQL查询。

import sqlite3

conn = sqlite3.connect("data.db")
cursor = conn.cursor()
cursor.execute("CREATE TABLE items (title TEXT, price TEXT)")

for item in items:
    title = item.select(".title")[0].text
    price = item.select(".price")[0].text
    cursor.execute("INSERT INTO items VALUES (?, ?)", (title, price))

conn.commit()
conn.close()

 

完整的代码示例:

import requests
from bs4 import BeautifulSoup
import csv
import sqlite3


def get_data():
    url = "https://www.example.com"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"}
    response = requests.get(url, headers=headers)
    html = response.text
    soup = BeautifulSoup(html, "html.parser")
    title = soup.find("title").text
    items = soup.select(".item")
    data = []
    for item in items:
        title = item.select(".title")[0].text
        price = item.select(".price")[0].text
        data.append((title, price))
    return title, data


def save_csv(title, data):
    with open("data.csv", "w", newline="") as file:
        writer = csv.writer(file)
        writer.writerow(["Title", "Price"])
        for item in data:
            writer.writerow(item)


def save_sqlite(title, data):
    conn = sqlite3.connect("data.db")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE items (title TEXT, price TEXT)")
    for item in data:
        cursor.execute("INSERT INTO items VALUES (?, ?)", item)
    conn.commit()
    conn.close()


title, data = get_data()
save_csv(title, data)
save_sqlite(title, data)

 

总结
本文介绍了如何使用Python实现简单的爬虫功能,并提供了相关的代码示例。使用这些代码,您可以轻松地从网站上获取所需的数据,并将它们存储到本地文件或数据库中。在编写爬虫程序时,请务必尊重网站的使用规则,并避免过度频繁地发出HTTP请求,以避免对网站造成不必要的负担。

标签:title,python,text,price,爬虫,item,HTML,简单,data
From: https://www.cnblogs.com/wq01/p/17614319.html

相关文章

  • Python爬虫在电商数据挖掘中的应用
    作为一名长期扎根在爬虫行业的专业的技术员,我今天要和大家分享一些有关Python爬虫在电商数据挖掘中的应用与案例分析。在如今数字化的时代,电商数据蕴含着丰富的信息,通过使用爬虫技术,我们可以轻松获取电商网站上的产品信息、用户评论等数据,为商家和消费者提供更好的决策依据。在本文......
  • python打包成sdk上传到私有仓库和使用
    我们已经学习了如何运行一个python项目(当我们有它的源码文件py文件的时候)。python的使用和运行我们有一个项目,需要打包到其他机器上运行,如果每次都是复制整个项目源码就显得有点笨拙。实现这个需求有很多种方案。例如:PyInstaller可参考链接:https://ningyu1.github.io/site/po......
  • 用python爬虫抓站的一些技巧总结 (转)
    用python爬虫抓站的一些技巧总结zzPython俱乐部您的足迹:»用python爬虫抓站的一些技巧总结zz显示源文件修订记录最近更改索引登录Python俱乐部PythonPythonClub首页Python基础Python常见文件操作Python网络编程Python小技巧Python趣闻Python类小课题我的项目关于本......
  • 哪种模式ip更适合你的爬虫项目?
    作为一名爬虫程序员,对于数据的采集和抓取有着浓厚的兴趣。当谈到爬虫ip时,你可能会听说过两种常见的爬虫ip类型:Socks5爬虫ip和HTTP爬虫ip。但到底哪一种在你的爬虫项目中更适合呢?本文将帮助你进行比较和选择。首先,让我们来了解一下Socks5爬虫ip和HTTP爬虫ip的基本概念和工作原理。So......
  • 遇到的问题--python---IndentationError: unexpected indent
    情况我们在运行python脚本时遇到错误报错IndentationError:unexpectedindent。如下图:原因字母意思就是不希望有缩进,去掉空格和tab。看看我们的代码如下:发现第一行没有顶格写,python对代码的格式要求很严格,python没有分号,用严格的缩进表示上下级从属层级关系,第一行需要顶......
  • 遇到的问题--python---IndentationError:expected an indented block
    情况我们在运行python脚本时遇到错误报错:IndentationError:expectedanindentedblock。如下图:原因字母意思就是希望有缩进,需要增加空格或者tab。我们看看我们的代码如下:python对代码的格式要求很严格,第一行需要顶格写,然后根据冒号:后续的代码行需要有缩进,并且有层级。......
  • 遇到的问题--python---代码格式层级错误导致if判断无效
    情况我们在运行python脚本时没有报错,但是发现if判断没有生效,python的格式很严格,也很深坑。原因if的层级超过了变量赋值语句的层级,所以判断无效。我们看看我们的代码如下:python对代码的格式要求很严格,第一行需要顶格写,然后根据冒号:后续的代码行需要有缩进,并且有层级。同样的......
  • python3 apscheduler 任务池 异常错误 /opt/www/taskPools1/venv/lib/python3.8/site-
    报错信息:(venv)root@VM-8-7-ubuntu:/opt/www/taskPools1#pythonmain.pyTraceback(mostrecentcalllast):File"/opt/www/taskPools1/venv/lib/python3.8/site-packages/apscheduler/jobstores/mongodb.py",line86,inadd_jobself.collection.insert_on......
  • python 使用BeautifulSoup的 html5lib爬取网站内容
    1、使用BeautifulSoup的'html5lib'能像网页工具一样渲染内容。缺点:运行比较慢2、安装包pipinstallhtml5lib3、直接获取网页的所有有效内容importrequests#数据请求模块第三方模块pipinstallrequestsfrombs4importBeautifulSoupheads={'User-Agen......
  • 100到python练习题(三)
    编写一个程序,找出一个列表中的最小的两个数。num_list=[10,5,8,2,15,3]sorted_list=sorted(num_list)min_numbers=sorted_list[:2]print("列表中的最小的两个数为:",min_numbers)编写一个程序,计算斐波那契数列的第n项。deffibonacci(n):ifn<=0:......