链家网
在实现爬取北、上、广租房信息时,需要使用fake_useragent、asyncio、aiohttp、requests、lxml以及pandas模块。
各模块关键技术如下:
1.fake_useragent模块
fake_useragent模块是第三方模块,所以在使用前需要先通过以下命令进行模块的安装:
pip install fake-useragent
模块安装完成以后,首先需要导入fake_useragent模块中的UserAgent类。代码如下:
from fake_useragent import UserAgent # 导入伪造头部信息的模块
(1)调用fake_useragent模块中UserAgent类的random属性可以实现随机获取浏览器的头部信息。语法格式如下:
UserAgent().random
实现随机获取浏览器头部信息的示例代码如下:
02 from fake_useragent import UserAgent # 导入伪造头部信息的模块
03 for i in range(5):
04 # 打印随机生成浏览器头部信息
05 print({
"User-Agent": UserAgent().random})
2.asyncio模块
asyncio模块主要用于执行异步io的处理工作,异步和同步是相对的,在执行一些耗时的I/O操作时,只发出I/O指令,并不会等待I/O的结果,在此期间去执行其它事情,以此提高效率。
asyncio模块是python的内置模块,所以在使用前需要使用import导入该模块。代码如下:
import asyncio
(1)协程是编写异步应用的推荐方式,需要通过async/await语法进行声明。例如,实现并发运行多个协程可以参考以下示例代码:
06 import asyncio # 导入异步IO模块
07 import time # 导入时间模块
08 async def asyncio_demo(delay, what): # 创建异步函数
09 await asyncio.sleep(delay) # 等待指定时间
10 print(what)
11 async def main(): # 异步主函数
12 # 创建协程任务1
13 task1 = asyncio.create_task(
14 asyncio_demo(1, 'hello'))
15 # 创建协程任务2
16 task2 = asyncio.create_task(
17 asyncio_demo(2, 'world'))
18 print("start_time",time.strftime('%X'))
19 await task1 # 调用协程任务1
20 await task2 # 调用协程任务2
21 print("end_time",time.strftime('%X'))
22 asyncio.run(main()) # 并发运行多个协程任务
运行结果如下:
start_time 11:16:52
hello
world
end_time 11:16:54
(2)在asyncio模块中提供了get_event_loop()方法,用于获取事件循环的实例对象,然后通过调用实例对象中的run_until_complete()方法来运行任务并等待任务完成。示例代码如下:
23 import asyncio # 导入异步IO模块
24 async def hello1(a): # 创建异步函数
25 await asyncio.sleep(a) # 等待指定时间
26 print('执行任务!')
27 loop = asyncio.get_event_loop() # 创建事件循环实例
28 start_time = loop.time() # 开始时间
29 print('开始时间:'