随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容,了解python爬虫,本文给大家分享Python爬取贝壳房源数据的实战教程,感兴趣的朋友一起学习吧9 Q/ c8 T, c1 W. M/ H0 n" m( H
一、爬虫是什么?+ Z& {- T5 B7 W9 r
在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得,但是这些获得数据的方式,有时很难满足我们对数据的需求,而手动从互联网中去寻找这些数据,则耗费的精力过大。此时就可以利用爬虫技术,自动地从互联网中获取我们感兴趣的数据内容,并将这些数据内容爬取回来,作为我们的数据源,从而进行更深层次的数据分析,并获得更多有价值的信息。在使用爬虫前首先要了解爬虫所需的库(requests)或者( urllib.request ),该库是为了爬取数据任务而创建的。0 c$ D- y; @1 O% ]' E; \
二、使用步骤8 n( r8 t* P w' D- B( f. G
1.引入库, m9 m% z0 |3 Z9 B
代码如下(示例):
l$ u. j7 s: }( Z7 s* c) w3 z
- import os
- import urllib.request
- import random
- import time
- class BeikeSpider:
- def __init__(self, save_path="./beike"):
- """
- 贝壳爬虫构造函数
- :param save_path: 网页保存目录
- """
2.读入数据
7 r4 U4 F$ L. h/ V. \/ b* m 代码如下 :" N: E2 y) S0 d' q' }/ k
- # 网址模式
- self.url_mode = "http://{}.fang.ke.com/loupan/pg{}/"
- # 需爬取的城市
- self.cities = ["cd", "sh", "bj"]
- # 每个城市爬取的页数
- self.total_pages = 20
- # 让爬虫程序随机休眠5-10秒
- self.sleep = (5, 10)
- # 网页下载保存根目录
- self.save_path = save_path
- # 设置用户代理,是爬虫程序伪装成浏览器
- self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36"}
- # 代理IP的信息
- self.proxies = [
- {"https": "123.163.67.50:8118"},
- {"https": "58.56.149.198:53281"},
- {"https": "14.115.186.161:8118"}
- ]
-
- # 创建保存目录
- if not os.path.exists(self.save_path):
- os.makedirs(self.save_path)
- def crawl(self):
- """
- 执行爬取任务
- :return: None
- """
该处使用的url网络请求的数据。
! `) |4 @7 U( M/ T3.随机选择一个ip地址构建代理服务器
" @! Q& X: B8 E7 G/ A& Y" L; S-
- for city in self.cities:
- print("正在爬取的城市:", city)
- # 每个城市的网页用单独的目录存放
- path = os.path.join(self.save_path, city)
- if not os.path.exists(path):
- os.makedirs(path)
-
- for page in range(1, self.total_pages+1):
- # 构建完整的url
- url = self.url_mode.format(city, page)
- # 构建Request对象, 将url和请求头放入对象中
- request = urllib.request.Request(url, headers=self.headers)
-
- # 随机选择一个代理IP
- proxy = random.choice(self.proxies)
- # 构建代理服务器处理器
- proxy_handler = urllib.request.ProxyHandler(proxy)
- # 构建opener
- opener = urllib.request.build_opener(proxy_handler)
- # 使用构建的opener打开网页
- response = opener.open(request)
- html = response.read().decode("utf-8")
- # 网页保存文件名(包含路径)
- filename = os.path.join(path, str(page)+".html")
-
- # 保存网页
- self.save(html, filename)
- print("第%d页保存成功!" % page)
-
- # 随机休眠
- sleep_time = random.randint(self.sleep[0], self.sleep[1])
- time.sleep(sleep_time)
该处除随机选择ip地址以外还会限制爬取数据的速度,避免暴力爬取。. |0 a5 U& r, d/ y; y# J4 N
4.运行代码# v; w$ R1 S+ _& H/ ?
-
- def save(self, html, filename):
- """
- 保存下载的网页
- :param html: 网页内容
- :param filename: 保存的文件名
- :return:
- """
-
- f = open(filename, 'w', encoding="utf-8")
- f.write(html)
- f.close()
-
- def parse(self):
- """
- 解析网页数据
- :return:
- """
- pass
-
- if __name__ == "__main__":
- spider = BeikeSpider()
- spider.crawl()
. l, z+ i% J1 p, p( ~, a5 `0 \ 运行结果就会这样,会保存在你的文件夹中。 |