使用 Python 实现网页内容爬取和自动化操作
在互联网时代,我们经常需要从网页上获取信息或执行一些自动化操作。通过模拟真实用户的浏览行为,如模拟鼠标移动、点击等操作来实现的。可以一定程度上绕过一些网站的反爬虫措施
WebpageScraper 类
WebpageScraper
类封装了一系列操作网页的方法,主要包括:
clear_folder(folder_path)
: 清空指定文件夹中的所有文件,如果文件夹不存在则创建。scroll_page_down()
: 模拟鼠标滚轮向下滚动页面,直到检测到页面滚动到底。get_html_content(url, roll=True)
: 打开指定 URL 的网页,模拟页面滚动操作(可选),并保存网页 HTML 内容到指定文件夹。
下面让我们详细了解一下这个类的实现:
clear_folder(folder_path)
该方法用于清空指定文件夹中的所有文件。如果文件夹不存在,则会创建该文件夹。
def clear_folder(folder_path):
if os.path.exists(folder_path):
for root, dirs, files in os.walk(folder_path):
for file_name in files:
file_path = os.path.join(root, file_name)
os.remove(file_path)
print(f"The folder '{folder_path}' has been clear.")
else:
os.makedirs(folder_path)
print(f"The folder '{folder_path}' has been created.")
scroll_page_down()
该方法模拟鼠标滚轮向下滚动页面,直到检测到页面滚动到底。它使用 pyautogui
库来控制鼠标滚轮,并根据页面颜色变化来判断是否已经滚动到底部。
def scroll_page_down(self):
"""模拟鼠标滚轮向下随机滚动"""
o_h, o_s, o_v = 0, 0, 0
for i in range(50):
# 获取当前鼠标位置
x, y = pyautogui.position()
# 随机生成滚动距离
scroll_distance = random.randint(500, 1000)
# 向下滚动鼠标滚轮
pyautogui.scroll(-scroll_distance, x, y)
# 随机生成滚动间隔时间
scroll_interval = random.uniform(1, 2.5)
# 等待一段时间,模拟滚动速度
time.sleep(scroll_interval)
# 判断是不是到底了
screenshot = pyautogui.screenshot()
pixels = list(screenshot.getdata())
r, g, b = map(lambda x: sum(x) / len(x), zip(*pixels))
h, s, v = colorsys.rgb_to_hsv(r/255, g/255, b/255)
if o_h == h and o_s == s and o_v == v:
print("end!!!")
break
else:
print(f"roll{i}")
o_h, o_s, o_v = h, s, v
get_html_content(url, roll=True)
该方法打开指定 URL 的网页,模拟页面滚动操作(可选),并保存网页 HTML 内容到指定文件夹。
def get_html_content(self, url, roll=True):
# 打开网页
webbrowser.open_new_tab(url)
time.sleep(1)
if roll:
self.scroll_page_down()
# 获取屏幕截图
pyautogui.hotkey('ctrl', 's')
time.sleep(2)
# 模拟按下回车键
pyautogui.press('enter')
time.sleep(1)
pyautogui.press('enter')
# 等待最大时长为3秒
start_time = time.time()
# 遍历文件夹中的文件
found_html = False
file_content = ""
while time.time() - start_time < 360:
if os.listdir(self.folder_path):
for filename in os.listdir(self.folder_path):
if filename.endswith(".html"):
# 获取文件的完整路径
file_path = os.path.join(self.folder_path, filename)
# 读取文件内容
with open(file_path, "r", encoding='utf-8') as file:
file_content = file.read()
# 打印文件内容
found_html = True
break # 找到第一个 HTML 文件后就退出循环
if found_html:
break
time.sleep(0.2) # 等待0.1秒,避免过度消耗CPU资源
if not found_html:
print("未下载完毕")
pyautogui.hotkey('ctrl', 'w')
time.sleep(1)
clear_folder(self.folder_path)
return file_content
使用示例
下面是使用 WebpageScraper
类的示例:
# 1、一定要把鼠标放在主屏幕
# 2、需要提前创建html到文件夹,后面才会默认存在该文件夹
url = 'https://imginnda_2nd/'
folder_path = "./downloads/temp_files"
scraper = WebpageScraper(folder_path)
html_content = scraper.get_html_content(url)
print(html_content)
在这个示例中,我们创建了一个 WebpageScraper
对象,并调用了 get_html_content()
方法来获取指定 URL 的网页内容。该方法会自动打开网页,滚动页面,并将 HTML 内容保存到指定文件夹中。最后,我们将获取的 HTML 内容打印出来。
通过使用 WebpageScraper
类,您可以方便地实现网页内容的自动化爬取和处理,节省大量的手工操作时间。该类还可以进一步扩展,实现更多的自动化功能,比如解析 HTML 内容、提取数据等。
希望这篇文章能够帮助您更好地理解 WebpageScraper
类的使用和实现原理。如果您有任何问题或建议,欢迎随时与我交流。