Python经典案例:实现简单的爬虫功能

发表于:2023-8-23 09:54

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:卑微阿文    来源:CSDN

  前言
  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请求,以避免对网站造成不必要的负担。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号