Code Monkey home page Code Monkey logo

zhihu_spider_selenium's Introduction

爬取知乎的内容

考虑到将写的内容爬取下来,保存起来的避免误删,算是个备份的,而且方便查找,阅读起来也更方便,使用起来也好很多

亮点

1、保存回答pdfmarkdown,并保存相应的图片、codes以及website,排版基本按照网页,支持保存数学公式到markdown,回答会保存提问和自己的回答

2、保存articlepdfmarkdown,并保存相应的图片、codes以及website,排版基本按照网页,支持保存数学公式到markdown

3、保存想法到text并保存相应的图片,最后对所有text进行汇总到一个档案

LOG

-----------20230729 使用beautifulsoup库来进行解析网页,使用起来更加稳定的而且排版更加贴近网页,之前是使用的selenium

-----------202306 上传

爬取到的想法展示

按照发布时间分目录存放,保存了图片以及文本文件
点击即可进入think目录查看的
2023-01-21 13:01

爬取到的article展示

点击即可进入article目录查看的
每篇article都附带了修改时间和IP属地

保存到Markdown格式的数学公式、codes和图片
泰勒公式推导方式
c++_set运算符重载

保存到PDF格式的,标题下面是网址

爬取到的回答展示

点击即可进入answer目录查看的
每篇回答也附带了修改时间和IP属地

保存到Markdown格式的数学公式、codes和图片
矩阵A正定,证A的逆矩阵和伴随矩阵也正定
Visual_Studio_Code_怎么编写运行_C、C++_程序

保存到PDF格式的,标题下面是网址

环境以及安装

win10 python
1、点击下面这个网页,安装miniconda也就是安装python,下载好以后安装即可,在安装时需要加入到系统环境变量,勾选下图第二个框即可。
https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.3.1-0-Windows-x86_64.exe

2、接着需要修改python安装的路径,将msedgedriver\.condarc这个档案放到根目录C:\Users\username即可,另外再打开一个cmd或者PowerShell
运行conda clean -i输入Y即可,此时Python已经可以使用了

3、安装Python相关的调用库,另外再打开一个cmd或者PowerShell,运行
cd C:\Users\usrname\zhihu
pip install -r .\requirement.txt

使用

1、登录

运行以下内容,这一步是手动操作,需要人工输入账号和密码,然后点击登录就行,登录以后会自动保存好cookie,以后爬取时就不用重复登录了,保存的cookie在这个目录的cookie,产生的档案是cookie_zhihu.pkl

python crawler.py

运行以后会弹出一个浏览器,自动打开知乎页面以后就可以开始登录,下图所示就是登录页面,两类登录方式都可以,只要能登录就行,点击登录以后,不要再操作页面,键盘或鼠标都不可以,登录时间默认给了130s时间,130秒以后会自动退出,然后查看目录cookie是否保存好cookie_zhihu.pkl,保存好就可以开始爬取了。

2、每项单独爬取

爬取一旦开始就自动运行了,爬取窗口一般不能最小化,可以做其他事情的
爬取知乎想法

默认的爬取每篇想法的睡眠时间是 6s*图片的数量 以上

python crawler.py --think --links_scratch

爬取知乎回答
默认的爬取每篇回答的睡眠时间是16s以上,这边实际爬取耗时平均是每篇 30s每个图片需要6s, --MarkDown控制是否保存markdown格式的网页内容

若是PDF看起来版式太大,调小参数就可以printop.scale,不是特殊情况一般不用调整

python crawler.py --answer --MarkDown --links_scratch

爬取知乎的article
默认的爬取每篇article的睡眠时间是16s以上,这边实际爬取130多篇,耗时平均是每篇 33.096s每个图片需要6s

python crawler.py --article --MarkDown --links_scratch

3、三项一起爬取的

python crawler.py --think --article --answer --MarkDown --links_scratch

参数详细解释

--links_scratch:重命名*.txt,然后爬取所有的article链接+标题,或者所有的回答链接+标题。article\article.txt和answer\answers.txt都保存了链接和标题

--MarkDown:保存markdown格式的article或者回答的

--think:是否爬取想法的

--article:是否爬取article的

--answer:是否爬取回答的

所以,爬取所有的article或者回答的链接,需要加--links_scratch,会重命名article.txt或者answers.txt,然后生成answers.txt或者article.txt,并爬取txt的网址

python crawler.py --think --article --answer --MarkDown --links_scratch
python crawler.py --answer --MarkDown --links_scratch
python crawler.py --article --MarkDown --links_scratch
python crawler.py --think --MarkDown --links_scratch

直接爬取当前article.txt或者answers.txt的网址,则需要删除--links_scratch

python crawler.py --think --article --answer --MarkDown
python crawler.py --answer --MarkDown
python crawler.py --article --MarkDown
python crawler.py --think --MarkDown

又发布了一篇,只爬取写的这篇

第一次可以全部爬取,等所有article或者回答或者想法都已经爬取好以后,此时若是又写了一篇或者几篇,而且想爬取到本地,可以将article/article.txt这个档案重命名到article/article_2023_06_20.txt,或者重命名answer.txt,然后将写好的article或者回答的网址和标题按照之前档案的格式再create一个article.txt/answer.txt档案,运行爬取程序就可以了的,此时需要去掉选项--links_scratch避免爬取所有链接,想法会跳过已经爬取好的时间,所以可以按照上面的方式运行,此时只会爬取article.txt/answer.txt的网址
也就是

python crawler.py --think --article --answer --MarkDown
或者
python crawler.py --answer --MarkDown
或者
python crawler.py --article --MarkDown
或者
python crawler.py --think --MarkDown

若是过了很长很长时间,发布了很多篇,此时一篇一篇加入不太方便,可以直接将article/article.txt这个档案重命名到article/article_2023_06_20.txt,或者重命名answer.txt,然后运行爬取程序即可,需要加入选项--links_scratch爬取所有链接,上面提到了已经爬取过的不会重复爬取,所以实际只会爬取最近写好的article或者回答,想法则会直接跳过已经爬取的内容。

目录

think:该目录存放爬取到的想法内容
article:该目录存放article的website以及爬取到的内容
answer:该目录存放回答的website以及爬取到的内容

注意

1、需要较好的网速,本机网速测验是下载100Mbps,上传60Mbps,低点也可以的,不是太慢太卡就行https://www.speedtest.cn/
2、爬取时设置了睡眠时间, 避免给知乎服务器带来太大压力,可以日间调试好,然后深夜运行爬取人少, 给其他小伙伴更好的用户体验, 避免知乎顺着网线过来找人,默认6s
3、若是一直停在登录页面,可能是之前保存的cookie失效了,需要再次登录保存cookie

blogs

https://www.aliyundrive.com/s/NikyVRJq8JV 阿里云分享的 提取 0h3l
爬取知乎发布的想法和文篇和回答
爬取CSDN发布的文篇
https://zoujiu.blog.csdn.net/article/details/131514422
https://zoujiu.blog.csdn.net/article/details/131521909

zhihu_spider_selenium's People

Contributors

zoujiu1 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

zhihu_spider_selenium's Issues

“没有知识的荒原”报错

有这样一类回答,当爬取自己的回答列表,获取 url 生成 answer.txt 文件时,可以在作者主页(本人账号登陆的情况下)看到并获取到 url

程序根据 url 链接执行时,由于此回答所关联的问题整个问题被删除(其他用户该问题下所有回答不可见)。

此时,由于无法获取输入 md 文件的内容,程序会直接崩溃。

是否可以有方法解决这类问题,或者说识别这类问题然后继续执行其他后续回答的爬取,并且将这类问题的 url 汇总到新的 txt 文件反馈给用户。

对题目中含有空格的问题,由于文件命名规则问题,下载时会导致崩溃

顺序爬取,当爬到特定问题下,整个程序就会崩溃。
举例网址1“https://www.zhihu.com/question/614902680/answer/3152426894 金融行业用 AI 做量化交易和高频交易靠谱吗?未来会如何发展 ?”
举例网址2“https://www.zhihu.com/question/622572713/answer/3221012170 如何看待某车企的内部规定,要求所有技术人员不能与供应商私自联系 ?”
上述网址回答,与其他问题的主要区别在于“私自联系 ?”和“如何发展 ?”,即最后一个问号前,多了一个空格,我认为可能是这个位置导致无法识别保存路径。

运行命令为python crawler.py --answer --MarkDown
以下部分使用最新版代码运行

Traceback (most recent call last):
  File "D:\24Python\12_数据抓取\00知乎\240502\git-zhihu_spider_selenium-master\crawler.py", line 1142, in <module>
    zhihu()
  File "D:\24Python\12_数据抓取\00知乎\240502\git-zhihu_spider_selenium-master\crawler.py", line 1087, in zhihu
    crawl_answer_detail(driver)
  File "D:\24Python\12_数据抓取\00知乎\240502\git-zhihu_spider_selenium-master\crawler.py", line 954, in crawl_answer_detail
    with open(os.path.join(dircrea, nam + ".md"), 'w', encoding='utf-8') as obj:
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\24Python\\12_数据抓取\\00知乎\\240502\\git-zhihu_spider_selenium-master\\answer\\金融行业用 AI 做量化交易和高频交易靠谱吗未来会如何发展 \\金融行业用 AI 做量化交易和.md'

爬取回答时报错,文章、想法可以爬取

报错内容

DevTools listening on ws://127.0.0.1:9922/devtools/browser/8b5cd6db-98dc-4859-a19b-586646e5eccd
[25540:10460:0430/152431.589:ERROR:fallback_task_provider.cc(127)] Every renderer should have at least one task provided by a primary task provider. If a "Renderer" fallback task is shown, it is a bug. If you have repro steps, please file a new bug and tag it as a dependency of crbug.com/739782.
[25540:10460:0430/152438.872:ERROR:fallback_task_provider.cc(127)] Every renderer should have at least one task provided by a primary task provider. If a "Renderer" fallback task is shown, it is a bug. If you have repro steps, please file a new bug and tag it as a dependency of crbug.com/739782.
Traceback (most recent call last):
  File "D:\24Python\zhihu_spider_selenium-master\crawler.py", line 1117, in <module>
    zhihu()
  File "D:\24Python\zhihu_spider_selenium-master\crawler.py", line 1053, in zhihu
    crawl_answers_links(driver, username)
  File "D:\24Python\zhihu_spider_selenium-master\crawler.py", line 177, in crawl_answers_links
    WebDriverWait(driver, timeout=10).until(lambda d: d.find_element(By.CLASS_NAME, "Pagination"))
  File "S:\condaenv\getdata310new\lib\site-packages\selenium\webdriver\support\wait.py", line 95, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
Stacktrace:
        GetHandleVerifier [0x00007FF6D98FD8E2+35890]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D98BACC2+1330002]
        Microsoft::Applications::Events::ILogManager::operator= [0x00007FF6D96AE137+5095]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96F4E7E+159950]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96F4F66+160182]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D972FEF7+401735]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D971474F+289183]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96EA6C7+117015]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D972DAF1+392513]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D9714373+288195]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96E9BEE+114238]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96E8DAC+110588]
        Microsoft::Applications::Events::GUID_t::GUID_t [0x00007FF6D96E97A1+113137]
        GetHandleVerifier [0x00007FF6D99939F4+650564]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D97899BC+79948]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D9862D4C+969692]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D985B485+938773]
        GetHandleVerifier [0x00007FF6D99929B5+646405]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D98C2E81+1363217]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D98BE4F4+1344388]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D98BE62B+1344699]
        Microsoft::Applications::Events::FromJSON [0x00007FF6D98B5B21+1309105]
        BaseThreadInitThunk [0x00007FF970E5257D+29]
        RtlUserThreadStart [0x00007FF971E6AA58+40]

crawler.py中需要修改用户名

否则会使用默认用户名,替换所有用户名后可以使用。

Requirements中最后一个少了一个等号。这个版本numpy在python 3.12上安装会有麻烦,实测最新版也能用。

感谢博主分享

bug报告

WebDriverWait(driver, timeout=10).until(lambda d: d.find_element(By.CLASS_NAME, "AnswerItem-editButtonText"))
如果答案无编辑,会无法继续,可通过try语句缓解,是否有次生bug未知
pages = driver.find_elements(By.CLASS_NAME, 'PaginationButton')[-2]
如果只有一页会无法继续,可通过try语句缓解,是否有次生bug未知

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.