看完!!一小时带你入门Python爬虫

本文介绍网络爬虫的基本概念、用途及工作原理,并通过一个Python爬虫实例演示如何抓取网页数据并存储到数据库。

一、什么叫爬虫

爬虫,又名“网络爬虫”,就是能够自动访问互联网并将网站内容下载下来的程序。它也是搜索引擎的基础,像百度和GOOGLE都是凭借强大的网络爬虫,来检索海量的互联网信息的然后存储到云端,为网友提供优质的搜索服务的。

二、爬虫有什么用

你可能会说,除了做搜索引擎的公司,学爬虫有什么用呢?哈哈,总算有人问到点子上了。打个比方吧:企业A建了个用户论坛,很多用户在论坛上留言讲自己的使用体验等等。现在A需要了解用户需求,分析用户偏好,为下一轮产品迭代更新做准备。那么数据如何获取,当然是需要爬虫软件从论坛上获取咯。所以除了百度、GOOGLE之外,很多企业都在高薪招聘爬虫工程师。你到任何招聘网站上搜“爬虫工程师”看看岗位数量和薪资范围就懂爬虫有多热门了。

在这里插入图片描述

三、爬虫的原理

发起请求:通过HTTP协议向目标站点发送请求(一个request),然后等待目标站点服务器的响应。

获取响应内容:如果服务器能正常响应,会得到一个Response。Response的内容便是所要获取的页面内容,响应的内容可能有HTML,Json串,二进制数据(如图片视频)等等。

解析内容:得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析;可能是Json,可以直接转为Json对象解析;可能是二进制数据,可以做保存或者进一步的处理。

保存数据:数据解析完成后,将保存下来。既可以存为文本文档、可以存到数据库中。

四、Python爬虫实例

前面介绍了爬虫的定义、作用、原理等信息,相信有不少小伙伴已经开始对爬虫感兴趣了,准备跃跃欲试呢。那现在就来上“干货”,直接贴上一段简单Python爬虫的代码:

1.前期准备工作:安装Python环境、安装PYCHARM软件、安装MYSQL数据库、新建数据库exam、在exam中建一张用于存放爬虫结果的表格house [SQL语句:create table house(price varchar(88),unit varchar(88),area varchar(88));]

2.爬虫的目标:爬取某租房网上首页中所有链接里的房源的价格、单位及面积,然后将爬虫结构存到数据库中。

3.爬虫源代码:如下

import requests #请求 URL 页面内容

from bs4 import BeautifulSoup #获取页面元素

import pymysql #链接数据库

import time #时间函数

import lxml #解析库(支持 HTML\XML 解析,支持 XPATH 解析)

#get_page 函数作用:通过 requests 的 get 方法得到 url 链接的内容,再整合成BeautifulSoup 可以处理的格式

def get_page(url):

response = requests.get(url)

soup = BeautifulSoup(response.text, ‘lxml’)

return soup

#get_links 函数的作用:获取列表页所有租房链接

def get_links(link_url):

soup = get_page(link_url)

links_div = soup.find_all(‘div’,class_=“pic-panel”)

links=[div.a.get(‘href’) for div in links_div]

return links

#get_house_info 函数作用是:获取某一个租房页面的信息:价格、单位、面积等

def get_house_info(house_url):

soup = get_page(house_url)

price =soup.find(‘span’,class_=‘total’).text

unit = soup.find(‘span’,class_=‘unit’).text.strip()

area = ‘test’ #这里 area 字段我们自定义一个 test 做测试

info = {

‘价格’:price,

‘单位’:unit,

‘面积’:area

}

return info

#数据库的配置信息写到字典

DataBase ={

‘host’: ‘127.0.0.1’,

‘database’: ‘exam’,

‘user’ : ‘root’,

‘password’ : ‘root’,

‘charset’ :‘utf8mb4’}

#链接数据库

def get_db(setting):

return pymysql.connect(**setting)

#向数据库插入爬虫得到的数据

def insert(db,house):

values = “’{}’,”*2 + “’{}’”

sql_values = values.format(house[‘价格’],house[‘单位’],house[‘面积’])

sql ="""

insert into house(price,unit,area) values({})

“”".format(sql_values)

cursor = db.cursor()

cursor.execute(sql)

db.commit()

#主程序流程:1.连接数据库 2.得到各个房源信息的 URL 列表 3.FOR 循环从第一个 URL 开始获取房源具体信息(价格等)4.一条一条地插入数据库

db = get_db(DataBase)

links = get_links(‘https://bj.lianjia.com/zufang/’)

for link in links:

time.sleep(2)

house = get_house_info(link)

insert(db,house)

首先,“工欲善其事必先利其器”,用 Python 写爬虫程序也是一样的道理,写爬虫过程中需要导入各种库文件,正是这些及其有用的库文件帮我们完成了爬虫的大部分工作,我们只需要调取相关的借口函数即可。导入的格式就是 import 库文件名。这里要注意的是在 PYCHARM 里安装库文件,可以通过光标放在库文件名称上,同时按ctrl+alt 键的方式来安装,也可以通过命令行(Pip install 库文件名)的方式安装,如果安装失败或者没有安装,那么后续爬虫程序肯定会报错的。在这段代码里,程序前五行都是导入相关的库文件:requests 用于请求 URL 页面内容;BeautifulSoup 用来解析页面元素;pymysql 用于连接数据库;time 包含各种时间函数;lxml 是一个解析库,用于解析 HTML、XML 格式的文件,同时它也支持 XPATH 解析。

其次,我们从代码最后的主程序开始看整个爬虫流程:

通过 get_db 函数连接数据库。再深入到 get_db 函数内部,可以看到是通过调用Pymysql 的 connect 函数来实现数据库的连接的,这里**seting 是 Python 收集关键字参数的一种方式,我们把数据库的连接信息写到一个字典 DataBase 里了,将字典里的信息传给 connect 做实参。

通过 get_links 函数,获取链家网租房首页的所有房源的链接。所有房源的链接以列表形式存在 Links 里。get_links 函数先通过 requests 请求得到链家网首页页面的内容,再通过 BeautifuSoup 的接口来整理内容的格式,变成它可以处理的格式。最后通过电泳find_all 函数找到所有包含图片的 div 样式,再通过一个 for 循环来获得所有 div 样式里包含的超链接页签(a)的内容(也就是 href 属性的内容),所有超链接都存放在列表links 中。

通过 FOR 循环,来遍历 links 中的所有链接(比如其中一个链接是:https://bj.lianjia.com/zufang/101101570737.html)

用和 2)同样的方法,通过使用 find 函数进行元素定位获得 3)中链接里的价格、单位、面积信息,将这些信息写到一个字典 Info 里面。

调用 insert 函数将某一个链接里得到的 Info 信息写入数据库的 house 表中去。深入到 insert 函数内部,我们可以知道它是通过数据库的游标函数 cursor()来执行一段 SQL语句然后数据库进行 commit 操作来实现响应功能。这里 SQL 语句的写法比较特殊,用到了 format 函数来进行格式化,这样做是为了便于函数的复用。

最后,运行一下爬虫代码,可以看到链家网的首页所有房源的信息都写入到数据里了。(注:test 是我手动指定的测试字符串)

在这里插入图片描述

后记:其实 Python 爬虫并不难,熟悉整个爬虫流程之后,就是一些细节问题需要注意,比如如何获取页面元素、如何构建 SQL 语句等等。遇到问题不要慌,看 IDE 的提示就可以一个个地消灭 BUG,最终得到我们预期的结构。

原文作者:QAtest
原文链接:https://zhuanlan.zhihu.com/p/76396956

<think>好的,用户想了解小白如何学好Python。首先,我需要考虑用户可能的背景,应该是没有编程经验的新手,所以要从最基础的部分开始讲起。用户可能对学习路径、资源选择、实践方法有疑问。 接下来,我得分解学习步骤。通常学习Python的第步是安装环境和基础语法,比如变量、数据类型、条件语句、循环、函数这些。要强调动手实践的重要性,可能推荐些在线编译器或本地安装的简易方法,比如使用Anaconda或者Thonny这样的IDE,避免复杂的配置。 然后,用户可能需要知道如何巩固基础。项目实践是关键,但作为小白,应该从小项目开始,比如计算器、猜数字游戏,这样能应用所学的基础知识。同时,推荐些练习平台,如LeetCode的简单题目,或者Codewars,帮助积累经验。 接下来是进阶部分,包括面向对象编程、模块和库的使用,比如requests、pandas等。这里需要提到实际应用场景,比如数据分析、网络爬虫,让用户明白学这些有什么用。同时,学习第三方库的安装和使用方法,比如pip的基本命令。 然后是方向选择,用户可能还不清楚学Python用来做什么,所以需要列举常见的方向,比如Web开发、数据分析、自动化等,并给出每个方向需要掌握的库或框架,比如Django、Flask、NumPy、Pandas,以及可能的深入学习资源,比如文档或教程。 资源推荐部分,书籍方面可能需要选择适合新手的,比如《Python编程:从入门到实践》,在线课程如Coursera的Python专项课程,社区推荐如Stack Overflow和GitHub,这些地方可以解决问题和参与项目。 学习建议方面,强调坚持和代码规范的重要性,比如PEP8,还有参与开源项目或自己做些实际应用,比如自动化处理Excel,这样能保持学习动力。同时,遇到问题如何解决,比如查文档、搜索引擎、提问等。 最后,总结学习路径,鼓励用户持续练习,并提醒不要停留在理论,多动手。可能需要检查是否有遗漏的部分,比如环境搭建的细节,或者常见错误处理,但考虑到用户是小白,避免信息过载,保持建议简洁实用。</think>以下是为零基础小白整理的Python学习路线,按照循序渐进的原则设计,建议收藏后逐步实践: 、搭建开发环境(1小时) 1. 安装Python(官网下载3.x版本) 2. 推荐IDE:VS Code(轻量级)或PyCharm社区版(功能全) 3. 验证安装:在终端输入 `python --version` 显示版本号即成功 二、掌握基础语法(2-4周) ```python # 示例:综合运用基础语法的计算器 def calculate(a, b, operator): if operator == '+': return a + b elif operator == '-': return a - b elif operator == '*': return a * b elif operator == '/': return round(a / b, 2) if b != 0 else "除数不能为0" else: return "无效运算符" print(calculate(5, 3, '+')) # 输出8 ``` 三、必学核心知识模块 1. 数据结构(列表/字典/集合/元组) 2. 文件操作(txt/csv/json读写) 3. 异常处理(try-except结构) 4. 面向对象编程(类与对象) 5. 常用内置模块(os, datetime, random) 四、项目驱动学习(选择1-2个实战) ```python # 示例:自动天气查询工具 import requests def get_weather(city): api_key = "YOUR_API_KEY" url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" response = requests.get(url) data = response.json() temp = round(data['main']['temp'] - 273.15, 1) return f"{city}当前温度:{temp}℃" print(get_weather("Beijing")) ``` 五、学习资源推荐 1. 入门书籍:《Python编程:从入门到实践》 2. 免费教程:菜鸟教程Python3(在线编辑器) 3. 练习平台:牛客网Python题库(按难度分级) 4. 实战项目:GitHub搜索「python beginner projects」 六、进阶路线选择 ┌─────────────┬─────────────┬─────────────┐ │ Web开发 │ 数据分析 │ 自动化 │ ├─────────────┼─────────────┼─────────────┤ │ Flask框架 │ Pandas库 │ Selenium │ │ Django框架 │ NumPy库 │ PyAutoGUI │ │ 前端基础 │ Matplotlib │ 定时任务 │ └─────────────┴─────────────┴─────────────┘ 七、避坑指南 1. 不要死记语法,理解原理更重要 2. 遇到报错先看错误提示最后行 3. 每学完个知识点立即写代码验证 4. 善用print()调试和type()查看类型 坚持每天编码1小时,3个月后可以尝试: ✓ 用Python处理Excel报表 ✓ 开发简单的网页爬虫 ✓ 制作数据可视化图表 ✓ 编写自动化办公脚本 记住:编程就像学游泳,站在岸边看再久也不如下水实践!开始写你的第行代码吧!
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值