赞
踩
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z
ChatGPT体验地址
随着互联网的快速发展,数据成为了新时代的石油。Python作为一种高效、易学的编程语言,在数据采集领域有着广泛的应用。本文将详细讲解Python爬虫的原理、常用库以及实战案例,帮助读者掌握爬虫技能。
爬虫,又称网络爬虫,是一种自动获取网页内容的程序。它模拟人类浏览网页的行为,发送HTTP请求,获取网页源代码,再通过解析、提取等技术手段,获取所需数据。
爬虫首先向目标网站发送HTTP请求,请求可以包含多种参数,如URL、请求方法(GET或POST)、请求头(Headers)等。服务器接收到请求后,返回相应的HTTP响应,包括状态码、响应头和响应体(网页内容)。
(1)请求库:如requests、aiohttp等,用于发送HTTP请求。
(2)解析库:如BeautifulSoup、lxml、PyQuery等,用于解析网页内容。
(3)存储库:如pandas、SQLite等,用于存储爬取到的数据。
(4)异步库:如asyncio、aiohttp等,用于实现异步爬虫,提高爬取效率。
(1)requests:简洁、强大的HTTP库,支持HTTP连接保持和连接池,支持SSL证书验证、Cookies等。
(2)aiohttp:基于asyncio的异步HTTP网络库,适用于需要高并发的爬虫场景。
(1)BeautifulSoup:一个HTML和XML的解析库,简单易用,支持多种解析器。
(2)lxml:一个高效的XML和HTML解析库,支持XPath和CSS选择器。
(3)PyQuery:一个Python版的jQuery,语法与jQuery类似,易于上手。
(1)pandas:一个强大的数据分析库,提供数据结构和数据分析工具,支持多种文件格式。
(2)SQLite:一个轻量级的数据库,支持SQL查询,适用于小型爬虫项目。
以爬取豆瓣电影TOP250为例,讲解如何编写一个简单的Python爬虫。
import requests from bs4 import BeautifulSoup import pandas as pd # 豆瓣电影TOP250的基础URL base_url = 'https://movie.douban.com/top250' # 定义一个函数来获取页面内容 def get_page_content(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: print('请求页面失败:', response.status_code) return None # 定义一个函数来解析页面内容 def parse_page_content(html): soup = BeautifulSoup(html, 'html.parser') movie_list = soup.find_all('div', class_='item') movies = [] for movie in movie_list: title = movie.find('span', class_='title').get_text() rating = movie.find('span', class_='rating_num').get_text() director = movie.find('p', class_='').find('a').get_text() movies.append({'title': title, 'rating': rating, 'director': director}) return movies # 定义一个函数来保存数据到CSV文件 def save_to_csv(movies): df = pd.DataFrame(movies) df.to_csv('douban_top250.csv', index=False, encoding='utf_8_sig') # 主函数,用于运行爬虫 def main(): movies = [] for i in range(0, 250, 25): # 豆瓣电影TOP250分为10页,每页25部电影 url = f'{base_url}?start={i}&filter=' html = get_page_content(url) if html: movies.extend(parse_page_content(html)) save_to_csv(movies) print('爬取完成,数据已保存到douban_top250.csv') # 运行主函数 if __name__ == '__main__': main()
在实际使用中,需要根据豆瓣网站的实际情况调整以下内容:
以爬取某招聘网站职位信息为例,讲解如何编写一个实用的Python爬虫。
通过观察招聘网站的URL、参数和页面结构,找到职位信息的来源。
(1)使用requests库发送带参数的HTTP请求,获取职位列表。
(2)使用lxml库解析职位列表,提取职位详情页URL。
(3)使用PyQuery库解析职位详情页,提取职位信息。
(4)使用SQLite数据库存储职位信息。
3. 结果展示与分析
import requests from lxml import etree from pyquery import PyQuery as pq import sqlite3 # 创建或连接SQLite数据库 conn = sqlite3.connect('job.db') cursor = conn.cursor() # 创建职位信息表 cursor.execute('CREATE TABLE IF NOT EXISTS job (id INTEGER PRIMARY KEY, title TEXT, salary TEXT, company TEXT, location TEXT)') # 分析网站结构后得到的职位列表URL url = 'https://www.example.com/jobs' # 发送HTTP请求获取职位列表 params = { 'page': 1, # 假设页面参数为page,这里请求第1页 'city': 'beijing' # 假设城市参数为city,这里请求北京地区的职位 } response = requests.get(url, params=params) response.encoding = 'utf-8' # 设置字符编码,防止乱码 # 使用lxml解析职位列表,提取职位详情页URL html = etree.HTML(response.text) job_list = html.xpath('//div[@class="job-list"]/ul/li/a/@href') # 假设职位详情页URL在a标签的href属性中 # 遍历职位详情页URL,爬取职位信息 for job_url in job_list: job_response = requests.get(job_url) job_response.encoding = 'utf-8' job_html = pq(job_response.text) # 使用PyQuery解析职位详情页,提取职位信息 title = job_html('.job-title').text() # 假设职位名称在class为job-title的元素中 salary = job_html('.job-salary').text() # 假设薪资信息在class为job-salary的元素中 company = job_html('.job-company').text() # 假设公司名称在class为job-company的元素中 location = job_html('.job-location').text() # 假设工作地点在class为job-location的元素中 # 存储职位信息到SQLite数据库 cursor.execute('INSERT INTO job (title, salary, company, location) VALUES (?, ?, ?, ?)', (title, salary, company, location)) conn.commit() # 关闭数据库连接 cursor.close() conn.close()
在实际使用中,需要根据目标网站的实际情况调整以下内容:
通过本文的讲解,相信读者已经对Python爬虫有了较为全面的认识。爬虫技能在数据分析、自然语言处理等领域具有广泛的应用,希望读者能够动手实践,不断提高自己的技能水平。同时,请注意合法合规地进行爬虫,遵守相关法律法规。祝您学习愉快!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。