在网络时代,大量的数据资源都存储在互联网上,如何获取这些数据是数据科学和人工智能领域最基本的问题之一。爬虫技术是解决这个问题的重要手段之一,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编写爬虫程序并获取网页数据,同时对爬虫的原理和流程有了更深入的了解。此外,还介绍了数据清洗和数据存储的基本操作。这些内容是数据科学、人工智能等领域的基础知识,对初学者来说是非常有用的。