本文将介绍如何使用Python的pyautogui
库编写一个简单的爬虫程序。我们将分步骤讲解代码,并解释每个步骤的作用。当网站的反爬很严,设置了User-Agent和cookie仍然不管用时,可以使用这种方法。
1. 导入所需库
首先,我们需要导入所需的库:
import webbrowser
import time
import win32gui
import win32con
import pyautogui
2. 定义一个最小化窗口的函数
接下来,我们定义一个名为small_window
的函数,用于最小化当前活动窗口:
def small_window():
# print('最小化')
hwnd = win32gui.GetForegroundWindow()
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
3. 使用webbrowser打开URL
然后,我们使用webbrowser
库打开指定的URL:
webbrowser.open(url)
time.sleep(5)
这里,我们让程序等待5秒,以确保网页完全加载。
4. 使用pyautogui模拟键盘操作
接下来,我们使用pyautogui
库模拟键盘操作:
pyautogui.hotkey('ctrl','s')
time.sleep(0.3)
pyautogui.typewrite('data',0.2)
time.sleep(0.3)
pyautogui.press('enter')
time.sleep(0.3)
pyautogui.press('enter')
time.sleep(0.3)
pyautogui.press('left')
time.sleep(0.3)
pyautogui.press('enter')
time.sleep(0.3)
pyautogui.press('left')
time.sleep(0.3)
pyautogui.press('enter')
time.sleep(0.3)
这里,我们模拟了按下Ctrl+S
组合键保存html文件,然后输入文件名data
,并按回车键确认(多次按下左键和回车是为了确保中英文输入法都能正确保存)。
5. 将新建的标签页关闭
在完成保存操作后,为了防止标签页堆积过多,还要关闭标签页。
time.sleep(6)
small_window()#先最小化是因为下载后edge会显示一个下载框,要最小化后再显示才能隐层。直接ctrl+w会删除下载的内容
time.sleep(1)
webbrowser.open('www.baidu.com')#用baidu.con唤起浏览器窗口
time.sleep(1)
pyautogui.hotkey('ctrl','w')#关闭baidu.com
time.sleep(1)
pyautogui.hotkey('ctrl','w')#关闭网址为url的窗口
time.sleep(1)
small_window()#再次最小化
time.sleep(0.5)
6. 读取页面的HTML内容
最后,我们读取HTML内容,并将其作为字符串返回:
with open(r'C:\Users\user\Downloads\data.html','r',encoding='utf-8') as f:
text = f.read()
return text
完整代码:
def myget(url):
def small_window():
print('最小化')
hwnd = win32gui.GetForegroundWindow()
win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)
import webbrowser
webbrowser.open(url)
time.sleep(5)
pyautogui.hotkey('ctrl','s')
time.sleep(1)#电脑比较慢,所以等待了一秒
pyautogui.typewrite('data',0.2)
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
pyautogui.press('left')
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
pyautogui.press('left')
time.sleep(1)
pyautogui.press('enter')
time.sleep(1)
time.sleep(6)
small_window()
time.sleep(1)
webbrowser.open('www.baidu.com')#其实也可以用 win32gui实现。
time.sleep(1)
pyautogui.hotkey('ctrl','w')
time.sleep(1)
pyautogui.hotkey('ctrl','w')
time.sleep(1)
small_window()
time.sleep(0.5)
with open(r'C:\Users\user\Downloads\data.html','r',encoding='utf-8') as f:
text = f.read()
return text