python获取页面文字信息
# -*- coding: utf- -*- from selenium import webdriver
import time, re,requests,os,time,random,traceback
import urllib.request,threading
from bs4 import BeautifulSoup
import html.parser
from tkinter import *
from tkinter import ttk
import tkinter.messagebox def getHtml(questionId,page):
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--start-maximized') # 最大化运行(全屏窗口),不设置,取元素会报错
chrome_options.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示
chrome_options.add_argument('--incognito') # 隐身模式(无痕模式)
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面 driver = webdriver.Chrome(executable_path = "chromedriver",options=chrome_options) # 打开浏览器
driver.get("https://www.zhihu.com/question/"+questionId+"/answers/updated?page="+str(page)) # 打开想要爬取的知乎页面 # 模拟用户操作
def execute_times(times):
for i in range(times):
print('第'+str(i)+'次点击')
driver.execute_script("window.scrollTo(0, "+str( * i)+");")
time.sleep()
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
execute_times() result_raw = driver.page_source # 这是原网页 HTML 信息
result_soup = BeautifulSoup(result_raw, 'html.parser')# 然后将其解析
result_bf = result_soup.prettify() # 结构化原 HTML 文件
answers = driver.find_elements_by_class_name("RichContent-inner")
txt = "start\n"
for answer in answers:
if len(answer.text) > :
txt = txt + answer.text + "\n-----------我是分隔符------\n"
with open(questionId +"/page_"+str(page)+".txt", 'w',encoding="utf-8") as zhpage: # 存储路径里的文件夹需要事先创建。
zhpage.write(txt)
zhpage.close()
print("爬取回答页面成功!!!")
driver.quit()
return result_soup def readTxt(path):
f = open(path,'r',encoding='utf-8')
strTxt = f.read()
f.close()
return strTxt def main(questionId,startPage,endPage):
mkdir([questionId])
for i in range(startPage,endPage):
try:
getHtml(questionId,i)
time.sleep(random.choice(range(,)))
except Exception:
traceback.print_exc()
pass def mkdir(paths):
for path in paths:
if not os.path.exists(path):
os.mkdir(path) def getanswer():
questionId = var_id.get()
start = var_start.get()
end = var_end.get()
main(questionId,start,end) if __name__ == '__main__':
main(str(),,) tk = Tk()
tk.title('获取知乎问题所有答案')
tk.geometry('600x150') frame = Frame(tk)
Label(tk,text='问题标识:(例:https://www.zhihu.com/question/324405640/answer/720532471中的324405640 )',width=,anchor=W, justify=LEFT).place(x=,y=)
var_id = Variable()
question_id = Entry(tk,textvariable=var_id,width=)
question_id.place(x=,y=) Label(tk,text='开始页:').place(x=,y=)
var_start = Variable()
e = Entry(tk, textvariable=var_start,width=).place(x=,y=)
var_start.set() Label(tk,text='结束页:').place(x=,y=)
var_end = Variable()
e = Entry(tk, textvariable=var_end,width=).place(x=,y=)
var_end.set() Button(tk, text="获取答案", command=getanswer).place(x=,y=)
#tk.mainloop()
python获取页面文字信息的更多相关文章
- Python 获取CentOS主机信息
Python 获取主机IP地址 #!/usr/bin/env python #coding:utf-8 import os ip=os.popen("ifconfig eth0|grep ' ...
- Python+Selenium 自动化实现实例-获取页面元素信息(百度首页)
#coding=utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get("http://www.ba ...
- 我了解到的新知识之----如何使用Python获取最新外汇汇率信息
这个需求本来是来源于公司同事工作中需求,用户需要使用数据分析工具Power BI抓取多页的中国银行官网上当天的外汇数据.但是没能研究出来. 我就开始在网络上找关于使用python来抓取当天汇率的案例分 ...
- Javascrip获取页面URL信息
使用Javascript可以方便获得页面的参数信息,常用的几种如下: 设置或获取对象指定的文件名或路径 window.location.pathname 设置或获取整个 URL 为字符串 wind ...
- 用Python获取Linux资源信息的三种方法
方法一:psutil模块 #!usr/bin/env python # -*- coding: utf-8 -*- import socket import psutil class NodeReso ...
- JS获取页面URL信息
下面我们举例一个URL,然后获得它的各个组成部分: http://i.cnblogs.com/EditPosts.aspx?opt=1 window.location.href (设置或获取整个 UR ...
- Python 获取本地主机信息
import wmi c = wmi.WMI() for sys in c.Win32_OperatingSystem(): #系统信息 print(sys.Caption) #系统版本号 print ...
- python获取群成员信息
#coding: utf-8 import itchat,datetime from itchat.content import TEXT itchat.auto_login(hotReload=Tr ...
- PYTHON 获取机器硬件信息及状态
#!/usr/bin/env python # encoding: utf-8 from optparse import OptionParser import os import re import ...
随机推荐
- springboot - 返回xml error 从自定义的 ErrorController
1.概览 2.在<springboot - 返回JSON error 从自定义的 ErrorController>基础上,做如下调整: 1).新增Attribute类和Error类 pac ...
- 【剑指Offer】面试题26. 树的子结构
题目 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A: 3 / \ ...
- Golang的类型转换实战案例
Golang的类型转换实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型概述 基础数据类型概述,博主推荐阅读: 布尔型: https://www.cnblogs. ...
- mfc WebBrowser打开本地网页
本地路径要用file协议,例子:file:///c:/abc/def.html注意点:file:后面是3个正斜杠,路径中用正斜杠(不是标准的反斜杠).如果你觉得IE地址栏支持标准的路径写法,那么你就错 ...
- .Net 经典案例
1.捕捉一只小可爱 using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...
- 聚类之高斯混合模型与EM算法
一.高斯混合模型概述 1.公式 高斯混合模型是指具有如下形式的概率分布模型: 其中,αk≥0,且∑αk=1,是每一个高斯分布的权重.Ø(y|θk)是第k个高斯分布的概率密度,被称为第k个分模型,参数为 ...
- 三、JavaScript之隐藏HTML元素
一.代码如下 二.点击前效果 三.点击后效果 <!DOCTYPE html> <html> <meta http-equiv="Content-Type&quo ...
- 061-PHP函数定义默认参数
<?php function add($x=2,$y=3){ //定义函数并设置默认参数 return $x+$y; } echo add(); //不传入参数调用add函数add(2,3) e ...
- HDU 4901 多校4 经典计数DP
RT 最近不想写博客,累积了一周多的题目,今天趁着周日放假,全部补上吧 dp[i][j]表示前i个数,操作后的值为j的总个数 注意取或不取,有种完全背包的意味.因为数字小于1024,所以异或的结果也绝 ...
- ServletConfig详解
ServletConfig是Servlet中的init()方法的参数类型,服务器会在调用init()方法时传递ServletConfig对象给init()方法. ServletConfig对象封装 ...