企业网站建设现状,网站建设 的公,加强住房公积金网站建设,网站做302跳转的意义前几天读了一篇CSDN社区的帖子#xff0c;发现文章内容写得极好#xff0c;值得借鉴学习。于是我想将那个社区的帖子都爬下来#xff0c;但是那个社区发布的贴子挺多的#xff0c;一直往下拉才到2022年5月的发布。于是我就只将5月份之前的爬下来就行#xff0c;但是帖子是… 前几天读了一篇CSDN社区的帖子发现文章内容写得极好值得借鉴学习。于是我想将那个社区的帖子都爬下来但是那个社区发布的贴子挺多的一直往下拉才到2022年5月的发布。于是我就只将5月份之前的爬下来就行但是帖子是动态加载的需要用Selenium来模拟用户下拉。但如何比较日期呢我首先想的是匹配输入一个字符串为2022-05-21的参数然后抓取每一个最新加载出来的帖子的日期用来和我的参数进行比较如果等于的话就不再模拟下拉。但是发现它却继续下拉到四月份的了原因很简单5月21号那天没有人发帖子。于是我就只能将参数的类型转换用日期date类型这在python中是可以比较大小的。 Python 的 datetime 模块提供了方便的功能来处理日期和时间包括日期的比较。下面是一个简单的示例展示如何比较两个日期。在这个例子中我们使用 datetime.strptime 方法将字符串转换为 datetime 对象然后可以直接比较这两个对象。
from datetime import datetime
# 定义两个日期
date1 datetime.strptime(2022-05-01, %Y-%m-%d)
date2 datetime.strptime(2023-05-01, %Y-%m-%d)# 比较日期
if date1 date2:print(date1 在 date2 之前)
elif date1 date2:print(date1 在 date2 之后)
else:print(date1 和 date2 是同一天)注意CSDN社区帖子的页面有三个可以拉动的div容器我们要抓取的帖子在第二个div容器里这个div容器用body标签是滚动不了的所以我写了一篇解决body标签无法滚动的文章。以下程序我将抓取的URL地址打印在屏幕上了如果感兴趣大家可以自行输出到文件或数据库的表中。
完整代码
import time
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.common.by import Byurl https://bbs.csdn.net/forums/se-learning?category10001driver webdriver.Edge()
driver.get(url)
# 目标日期
date datetime.strptime(2022-05-01, %Y-%m-%d)
def scroll_to_bottom(driver,date):SCROLL_PAUSE_TIME 1scrollable_div driver.find_elements(By.CSS_SELECTOR, div.__panel)[1] # 选择第二个可滚动的div容器date1 datetime.strptime(2022-07-01, %Y-%m-%d) # 随便选个日期比目标日期大就行while date1 date:driver.execute_script(arguments[0].scrollTop arguments[0].scrollHeight, scrollable_div)divs driver.find_elements(By.CLASS_NAME, tab-list-item)div divs[-1]time.sleep(SCROLL_PAUSE_TIME)date1 div.find_element(By.CSS_SELECTOR, span.cop-p.time).textdate1 datetime.strptime(date1, %Y-%m-%d) # 数据类型可变从字符串到日期类型time.sleep(SCROLL_PAUSE_TIME)return divsdivs scroll_to_bottom(driver,date)
for div in divs:tag div.find_element(By.CLASS_NAME,content)url tag.find_element(By.TAG_NAME,a).get_attribute(href)print(url)如果有需要还可以使用以下方法对Edge进行初始化这样就不会打开浏览器界面。 from selenium.webdriver.edge.options import Options as EdgeOptions # 配置 Edge 浏览器选项如果不需要打开浏览器界面可以使用无头模式 edge_options EdgeOptions() edge_options.use_chromium True edge_options.add_argument(--disable-gpu) edge_options.add_argument(--headless) # 初始化 Edge 浏览器 driver webdriver.Edge(optionsedge_options)