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 ...
随机推荐
- 洛谷 三月月赛 A
模拟模拟 #include<bits/stdc++.h> using namespace std; inline int ra() { ,f=; char ch=getchar(); ; ...
- Oracle之SQL优化专题03-如何看懂SQL的执行计划
专题第一篇<Oracle之SQL优化专题01-查看SQL执行计划的方法>讲到了查看SQL执行计划的方法,并介绍了各种方法的应用场景,那么这一篇就主要介绍下如何看懂SQL的执行计划.毕竟如果 ...
- 166-PHP 文本分割函数str_split(一)
<?php $str='programming'; //定义一个字符串 $arr=str_split($str); //将字符串分割并传入数组 print_r($arr); //输出数组详细信息 ...
- web前端知识点
一.CSS问题 1.flex布局 display:flex; 在父元素设置,子元素受弹性盒影响,默认排成一行,如果超出一行,按比例压缩 flex:1; 子元素设置,设置子元素如何分配父元素的空间,fl ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-align-justify
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- oracle将字符串根据特定字符串拆分为多个子字符串
将 字符串 '20180321-4768-4735261' 按‘-’ 拆分: 语法: INSTR()函数 1.用处: 在一个字符串中查找指定的字符,返回被查找到的指定的字符的位置. 2.语法格式: ...
- flutter文本简单实现
import 'package:flutter/material.dart'; import 'package:flustars/flustars.dart'; import 'package:fl_ ...
- 每天一点点之 taro 框架开发 - 事件处理与样式表
1.方法调用 state = { name:'张三' } test(){ this.state.name } <button onClick={ this.test.bind(this) } / ...
- UVALive 5913 字典树
先输入n个字符串的字典,每个字符串的前缀+后缀可以组成新的合法字符串,但肯定是有重复的,问从给定的字符串,生成的所有可能的字符串为多少个 把前缀和后缀压入字典树,达到前缀和后缀的去重,首先的总和即为前 ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring IoC容器BeanFactory和ApplicationContext
IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建.Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring ...