如何抓取历史⽂章?使⽤实现历史⽂章爬⾍
    已经改版了,这篇⽂章已经过时了,不过可以提供还算有价值的参考。
    已经成为⽣活的⼀部分了,虽然⾥⾯有很多作者只是为了蹭热点,撩读者的 G 点,⾃⼰从中获得⼀些收益;但是不乏好的,像刘⼤的码农翻⾝、曹⼤的caoz的梦呓等⾮常值得阅读。
    平时有时候看到⼀些好的,也会不⾃觉去查看该的历史⽂章,然⽽每次都看不完,下⼀次再从⾥⾯打开历史⽂章,⼜需要从头翻起。⽽且对于写了很多年的⼤号,每次还翻不到底。有⼀些平台提供了相关的服务,但是得收⼏⼗块钱的费⽤,倒不是缺⼏⼗块钱,主要是觉得这种没必要花的钱不值得去浪费。
    ⽹上搜如何爬历史⽂章,⼤致给了三种思路,第⼀是使⽤搜狗搜索⽂章,但是好像每次能搜到的不多;第⼆是使⽤抓包⼯具;第三种是使⽤个⼈进⾏抓取。
    简单来说就是使⽤程序来模拟⼈的操作,抓取历史⽂章。⾸先登录个⼈平台,期间需要管理员扫码才能登录成功。
def__open_gzh(self):
(BASE_URL)
self.driver.maximize_window()
username_element = self.driver.find_element_by_name("account")
password_element = self.driver.find_element_by_name("password")
login_btn = self.driver.find_element_by_class_name("btn_login")
username_element.send_keys(USERNAME)
password_element.send_keys(PASSWORD)
login_btn.click()
WebDriverWait(driver=self.driver, timeout=200).until(
ec.url_contains("cgi-bin/home?t=home/index")
)
# ⼀定要设置这⼀步,不然公众平台菜单栏不会⾃动展开
self.driver.maximize_window()
    进⼊公众平台⾸页后,点击素材管理,然后点击新建图⽂素材,就会进⼊到⽂章写作页⾯,此时前⾯打开的公众平台⾸页就不需要了,可以将其关闭。
def__open_write_page(self):
management = self.driver.find_element_by_class_name("weui-desktop-menu_management")
material_manage = management.find_element_by_css_selector("a[title='素材管理']")
material_manage.click()
new_material = self.driver.find_element_by_class_name("weui-desktop-btn_main")
new_material.click()
# 关闭公众平台⾸页
handles = self.driver.window_handlesselenium怎么使用
self.driver.close()
self.driver.switch_to_window(handles[1])
    在⽂章写作页⾯的⼯具栏上⾯有⼀个超链接按钮,点击超链接即会弹出超链接编辑框,选择查⽂章,输⼊⾃⼰喜欢的进⾏查,⼀般第⼀个就是⾃⼰想要的结果,点击对应的,该所有的⽂章就会通过列表的形式展现出来。
def__open_official_list(self):
# 超链接
link_click = self.driver.find_element_by_class_name("edui-for-link")
link_click.click()
time.sleep(3)
# 查⽂章
radio = self.driver.find_element_by_class_name("frm_vertical_lh").find_elements_by_tag_name("label")[1]
radio.click()
# 输⼊查关键字
search_input = self.driver.find_element_by_class_name("js_acc_search_input")
search_input.send_keys(OFFICIAL_ACCOUNT)
search_btn = self.driver.find_element_by_class_name("js_acc_search_btn")
search_btn.click()
# 等待5秒,待列表加载完毕
time.sleep(5)
result_list = self.driver.find_element_by_class_name("js_acc_list").find_elements_by_tag_name("div")
result_list[0].click()
    ⽂章列表已经展现出来了,直接抓取每条⽂章超链接的信息即可,每抓取完⼀页就进⼊下⼀页,继续抓取⽂章列表信息,直到所有⽂章信息都抓取完毕。
def__get_article_list(self):
# 等待⽂章列表加载
time.sleep(5)
total_page = self.driver.find_element_by_class_name("search_article_result")\
.find_element_by_class_name("js_article_pagebar").find_element_by_class_name("page_nav_area")\
.find_element_by_class_name("page_num")\
.find_elements_by_tag_name("label")[1].text
total_page =int(total_page)
articles =[]
for i in range(0, total_page-1):
time.sleep(5)
next_page = self.driver.find_element_by_class_name("search_article_result")\
.find_element_by_class_name("js_article_pagebar").find_element_by_class_name("pagination")\
.find_element_by_class_name("page_nav_area").find_element_by_class_name("page_next")
article_list = self.driver.find_element_by_class_name("js_article_list")\
.find_element_by_class_name(" my_link_list").find_elements_by_tag_name("li")
for article in article_list:
article_info ={
"date": article.find_element_by_class_name("date").text,
"title": article.find_element_by_tag_name("a").text,
"link": article.find_element_by_tag_name("a").get_attribute("href")
}
articles.append(article_info)
next_page.click()
return articles
    ⾄此,历史⽂章的爬⾍已经实现,其实整个过程只不过是⽤程序来模拟的了⼈类的操作。需要注意的是,程序不能设置太快,因为做了相关限制,所以设太快会在⼀段时间内⽆法使⽤⽂章查功能;另外⼀点是使⽤选择器选择页⾯元素的时候,会有⼀些坑,⽽且我发现不同账号登录,有很少部分的页⾯元素虽然直观上是⼀样的,但是它的 html 代码有细微的差别。
    这个⼩程序会⽤到selenium库,和chromedriver,前者直接pip install即可,后者⾃⾏下载;另外你还需要⼀个才⾏,本⽂只实现了关键的⽂章信息抓取,并没有进⾏⽂章信息的持久化存储,在这⾥。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。