您的位置:

Python:用代码实现爬虫并获取网页数据

在网络时代,大量的数据资源都存储在互联网上,如何获取这些数据是数据科学和人工智能领域最基本的问题之一。爬虫技术是解决这个问题的重要手段之一,Python语言由于简单易学、功能强大受到了越来越多数据科学家的青睐。本文通过详细介绍Python爬虫在网页数据获取方面的应用,希望能为初学者提供帮助。

一、选择爬取目标,分析网页结构

在进行爬虫操作时,首先需要确定爬取的目标。可以从热门新闻、社交媒体、电商网站等多个方面进行选择。在确定好目标网站后,需要进行网页结构的分析,即确定需要获取哪些网页数据。

Python中有很多爬虫框架可以选择,其中比较流行的包括Beautiful Soup、Scrapy、Selenium等。这里我们选用Beautiful Soup库进行网页解析,它是一个Python包,可以从HTML或XML文件中提取数据。

下面是一个示例的代码:

from bs4 import BeautifulSoup
import requests

url = 'https://www.baidu.com/'
r = requests.get(url)

soup = BeautifulSoup(r.text, 'lxml')
print(soup.prettify())

这段代码首先导入了Beautiful Soup库和requests库,requests库提供了Python访问网络资源的功能。

接着,我们定义需要解析的目标网址,然后使用requests库中的get方法获取网页源代码,最后使用Beautiful Soup库对网页源代码进行解析,获取数据。

二、解析网页,提取数据

当我们成功获取网页源代码后,就需要使用解析工具对网页源代码进行解析,提取出需要的数据。对于HTML格式的网页,Beautiful Soup是一个非常强大的解析器。

下面我们通过一个例子来演示如何从网页中提取图片。这里使用pip安装的requests和bs4库。

import requests
from bs4 import BeautifulSoup
import os

url = 'http://www.meizitu.com/a/more_1.html'

header = {'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'}

res = requests.get(url, headers=header)
res.encoding = 'gb2312'

soup = BeautifulSoup(res.text,"html.parser")
for pic_link in soup.select('.pic a'):
    page_url = pic_link.get('href')
    page_res = requests.get(page_url,headers=header)
    page_res.encoding = 'gb2312'
    page_soup = BeautifulSoup(page_res.text,"html.parser")
    for index, img_link in enumerate(page_soup.select('.main-image img')):
        image_url = img_link.get('src')
        curr_dir = 'meizitu'
        if not os.path.isdir(curr_dir):
            os.mkdir(curr_dir)
        with open(curr_dir + '/%d.jpg' % index, 'wb') as f:
            f.write(requests.get(image_url).content)
            f.close()

运行上述代码可以抓取妹子图网站的图片。

三、数据清洗及数据存储

在获取数据之后,需要进行数据的清洗。由于爬虫程序在获取数据时无法保证数据的准确性和完整性,所以需要对数据进行清洗,去掉噪音、重复和错误数据,从而保证数据的准确性。

完成数据清洗后,需要将数据存储到数据库中。Python中可以使用多种数据库,包括MySQL、MongoDB、Redis等等。下面我们以MySQL为例来演示数据存储的操作。

import mysql.connector

conn = mysql.connector.connect(user='root', password='123456', database='test', host='localhost', port=3306)

cursor = conn.cursor()

# 创建表
create_table_sql = '''CREATE TABLE `students` (
                             `id` int(11) NOT NULL AUTO_INCREMENT,
                             `name` varchar(255) NOT NULL,
                             `age` int(11) NOT NULL,
                             PRIMARY KEY (`id`)
                        ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'''
cursor.execute(create_table_sql)

# 插入数据
insert_data_sql = "INSERT INTO students(name, age) VALUES(%s,%s)"
students_data = [('Alex',20),('Bob',22),('Charlie',21),('David',19),('Eason',18)]
for data in students_data:
    cursor.execute(insert_data_sql,data)

# 提交事务
conn.commit()

# 查询数据
select_data_sql = "SELECT * FROM students"
cursor.execute(select_data_sql)
res = cursor.fetchall()
print(res)

# 关闭游标和连接
cursor.close()
conn.close()

上述代码先连接到MySQL的test数据库中,然后创建一个名为students的表,并插入了5条数据。

完成数据插入后,我们通过select语句查询了整个students表的内容,并将结果打印到控制台上。

结论

通过本文的介绍,我们可以了解到如何使用Python编写爬虫程序并获取网页数据,同时对爬虫的原理和流程有了更深入的了解。此外,还介绍了数据清洗和数据存储的基本操作。这些内容是数据科学、人工智能等领域的基础知识,对初学者来说是非常有用的。