三个python爬虫项目实例代码

三个python爬虫项目实例代码完整攻略

项目简介

本项目是针对python爬虫初学者提供的三个实例爬虫代码,分别是:

  1. 爬取豆瓣图书TOP250的书籍信息
  2. 爬取天猫商城的商品信息及评论
  3. 爬取GitHub上的开源项目信息

每个项目的代码都包括了完整的数据爬取和存储代码,可以作为初学者进行学习和实践的完整资料。

项目目标

在三个不同的爬虫项目中,我们将能够学习到:

  • 如何通过HTTP请求获取网页的HTML代码
  • 如何通过正则表达式筛选获取所需数据
  • 如何通过XPath、CSS Selector获取网页元素信息
  • 如何通过Python代码完成数据的存储、处理和可视化

项目实现

项目一:爬取豆瓣图书TOP250的书籍信息

  • 爬取目标:豆瓣图书TOP250榜单,包括书名、作者、出版社、出版日期、评分等信息
  • 实现过程:

    1. 利用requests库发送HTTP请求,获取HTML代码
    2. 利用正则表达式筛选所需数据
    3. 将数据存储至CSV文件中
  • 示例代码:

import requests
import re
import csv

def get_html(url):
    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)
    if response.status_code == 200:
        return response.text
    else:
        return None


def parse_html(html):
    pattern = re.compile(
        r'<div class="pl2">.*?<a href="(.*?)" title="(.*?)">', re.S)
    items = re.findall(pattern, html)
    return items


def save_csv(items):
    with open('books.csv', 'a', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        for item in items:
            writer.writerow([item[1], item[0]])


if __name__ == '__main__':
    for i in range(0, 250, 25):
        url = 'https://book.douban.com/top250?start=' + str(i)
        html = get_html(url)
        items = parse_html(html)
        save_csv(items)

项目二:爬取天猫商城的商品信息及评论

  • 爬取目标:天猫商城的商品信息及评论,包括商品名称、价格、销量、评论数量等信息
  • 实现过程:

    1. 利用Selenium库模拟浏览器行为,获取HTML代码
    2. 利用Xpath方式或CSS Selector方式获取所需数据
    3. 将数据存储至MongoDB中
  • 示例代码:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from pymongo import MongoClient


def get_html(url):
    options = webdriver.ChromeOptions()
    options.add_argument('--headless')
    options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(chrome_options=options)
    driver.get(url)
    assert '天猫tmall.com' in driver.title
    # 等待页面加载完毕
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.ID, 'J_ItemList')))
    html = driver.page_source
    driver.quit()
    return html


def parse_html(html):
    items = []
    product_list = html.xpath('//div[@id="J_ItemList"]/div[@class="product "]/div[@class="product-iWrap"]')
    for product in product_list:
        item = {}
        item['name'] = product.xpath('.//p[@class="productTitle"]/a/@title')[0]
        item['price'] = product.xpath('.//p[@class="productPrice"]/em/@title')[0]
        item['sales'] = product.xpath('.//div[@class="productStatus"]/span[@class="productStatus-sellCount"]/em/text()')[0]
        item['comments'] = product.xpath('.//div[@class="productStatus"]/span[@class="productStatus-comment"]/a/text()')[0]
        items.append(item)
    return items


def save_mongodb(items):
    client = MongoClient('localhost', 27017)
    db = client['tmall']
    collection = db['goods']
    result = collection.insert_many(items)
    print(f'Inserted {len(result.inserted_ids)} items')


if __name__ == '__main__':
    url = 'https://list.tmall.com/search_product.htm?q=%CD%AF%D2%A9%C6%B7&sort=d&style=w&from=mallfp..pc_1_searchbutton'
    html = get_html(url)
    items = parse_html(html)
    save_mongodb(items)

项目三:爬取GitHub上的开源项目信息

  • 爬取目标:GitHub上的开源项目信息,包括项目名称、作者、描述、星级等信息
  • 实现过程:

    1. 利用GitHub的API获取开源项目信息
    2. 解析JSON数据,获取所需信息
    3. 将数据存储至MySQL数据库中
  • 示例代码:

import requests
import json
import mysql.connector


def get_data(url):
    response = requests.get(url)
    if response.status_code == 200:
        return json.loads(response.text)
    else:
        return None


def parse_data(data):
    items = []
    for repo in data:
        item = {}
        item['name'] = repo['name']
        item['author'] = repo['owner']['login']
        item['description'] = repo['description']
        item['stars'] = repo['stargazers_count']
        items.append(item)
    return items


def save_mysql(items):
    conn = mysql.connector.connect(user='root', password='root', database='github')
    cursor = conn.cursor()
    for item in items:
        cursor.execute(
            'INSERT INTO repos (name, author, description, stars) VALUES (%s, %s, %s, %s)', (item['name'], item['author'], item['description'], item['stars']))
    conn.commit()
    cursor.close()
    conn.close()


if __name__ == '__main__':
    url = 'https://api.github.com/search/repositories?q=language:python&sort=stars'
    data = get_data(url)
    items = parse_data(data['items'])
    save_mysql(items)

总结

本项目介绍了三个实例Python爬虫项目的完整实现过程,旨在帮助爬虫初学者巩固所学知识,掌握实际操作技能。同时,项目中也体现了Python爬虫领域的基本技能和注意事项,如HTTP请求、数据筛选、数据存储等内容。如果您在项目实施过程中依然存在疑问,欢迎随时向我提问。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:三个python爬虫项目实例代码 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • 浅析Python中的套接字编程

    浅析Python中的套接字编程 套接字 套接字(socket)是计算机网络中的一个抽象概念,它被用作网络通信的句柄(handle)。在Python中,我们可以使用socket模块来实现套接字编程。 套接字编程基础 在Python中使用socket,通常需要以下步骤: 创建套接字对象。 import socket s = socket.socket(socke…

    python 2023年5月31日
    00
  • Python实现树莓派摄像头持续录像并传送到主机的步骤

    下面是“Python实现树莓派摄像头持续录像并传送到主机的步骤”的完整攻略: 准备工作 确保树莓派摄像头已经正确安装。 在树莓派上安装Python开发环境,并安装picamera包。 bash sudo apt-get update sudo apt-get install python3-picamera 录像并传送到主机的步骤 使用Python的pica…

    python 2023年5月30日
    00
  • Python 网页请求之requests库的使用详解

    下面是关于“Python 网页请求之requests库的使用详解”的完整攻略: 1. requests库简介 requests是一个Python第三方库,用于发送HTTP请求。 使用requests包可以轻松地向指定的URL发送请求,获取响应。 2. requests的安装 在终端中使用pip命令安装: pip install requests 3. req…

    python 2023年6月3日
    00
  • python实现的阳历转阴历(农历)算法

    下面是详细讲解“Python实现的阳历转阴历(农历)算法”的完整攻略,包含两个示例说明 阳历阴历 阳历是指以地球公转为基础的历法,也称为公历。阴历是指以月亮围地球运行基础的历法,也称为农历。 阳历转阴历算法 阳历转阴历算法是一种将阳历日期转换为阴历日期的算法。下面是一个示例代码,用于实现阳历转阴历算法: import datetime def lunar(y…

    python 2023年5月14日
    00
  • OpenCV图像轮廓的绘制方法

    当我们对一幅图像进行处理时,图像轮廓往往是重要的信息之一。OpenCV提供了方便的接口来提取图像轮廓并进行绘制。以下是OpenCV图像轮廓的绘制方法的完整攻略。 准备工作 在开始之前,需要先安装OpenCV并导入相关库。下面是在Python中导入OpenCV库的示例代码: import cv2 提取轮廓 OpenCV提供了函数cv2.findContours…

    python 2023年5月19日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.2’”怎么处理?

    当使用Java的Hibernate框架时,可能会遇到“LockAcquisitionException”错误。这个错误通常是由以下原因之一引起的: 并发访问:如果多个线程同时访问同一个对象,则会出现此错误。在这种情况下,需要使用Hibernate的锁定机制来避免并发访问。 死锁:如果多个线程同时持有不同的锁,并且每个线程都试图获取另一个线程持有的锁,则会出现…

    python 2023年5月4日
    00
  • python3 面向对象__类的内置属性与方法的实例代码

    Python 3 是一种面向对象编程的语言,这意味着你可以创建类和对象,并使用它们来管理数据和行为。类是对象的模板或蓝图,它定义了对象的属性和方法。Python 3 为类和对象提供了许多内置属性和方法,让你更方便地处理它们。 类的内置属性 Python 3 中的每个类都有一些内置属性,如下所示: __name__:表示类的名称 __module__:表示定义…

    python 2023年6月2日
    00
  • Python descriptor(描述符)的实现

    Python descriptor(描述符)是一种协议,它允许自定义的对象(通常是类)来对属性的访问进行控制。在使用描述符时,我们可以在类中定义__get__()、set()、delete()三个方法,用来控制属性的读取、赋值、删除行为。接下来我将详细讲解Python描述符的实现。 Python描述符的实现 Python描述符的实现主要依赖于三个特殊方法:g…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部