鱼C论坛

 找回密码
 立即注册
查看: 1651|回复: 7

[已解决]python自动登录sci-hub文献检索平台遇到的问题

[复制链接]
发表于 2022-3-31 16:33:01 | 显示全部楼层 |阅读模式
60鱼币
我利用requests模块的session方法进行网站的登录 并检索文献 代码如下


  1. import requests
  2. headers = {
  3.     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36"
  4. }

  5. user_data = {
  6.     'username':'xxx',
  7.     'password':'xxx'
  8. }
  9. login_url = 'https://sci-hub.org.cn/loginhub'
  10. paper_data = {
  11. "q": "(16) Schmidt-Rohr, K.; Chen, Q. Parallel Cylindrical Water Nanochannels in Nafion Fuel-Cell Membranes. Nat. Mater. 2008, 7, 75−83.",
  12. }#这个暂时没有用

  13. search_url_0 = 'https://sci-hub.org.cn/scholar?hl=zh-TW&as_sdt=0%2C5&q='


  14. def replace_string(string):
  15.     '''这个函数是将输入的参考文献格式转换成url文献检索网址的格式'''
  16.     replace_str = [' ', ',', ';', '(', ')']
  17.     changed_str = ['+', '%2C', '%3B', '%28', '%29']
  18.     for i in range(len(replace_str)):
  19.         string = string.replace(replace_str[i], changed_str[i])
  20.     return string


  21. session = requests.session()
  22. paper_name = input("请输入你要检索的参考文献:")
  23. search_url_1 = replace_string(paper_name)
  24. search_url = search_url_0 + search_url_1

  25. resp0 = session.post(login_url, data=user_data, headers=headers)#登录网站

  26. resp = session.get(search_url, headers=headers)#进行检索
  27. print(resp.text)
  28. resp.close()
  29. resp_0.close()
复制代码



但是出现了问题 首先无论是resp0还是resp进行raise_for_status()检查返回都是None
然后是resp.text返回如下,这并不是我想要的网页代码,我保存为html文件(代码如下)用网页打开也是一片空白,想请教一下是哪里出现了问题
  1. <!DOCTYPE html>
  2.     <html xmlns="http://www.w3.org/1999/xhtml">
  3.     <head>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5.         <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, post-check=0, pre-check=0"/>
  6.         <meta http-equiv="Connection" content="Close"/>
  7.         <script type="text/javascript">
  8.             function AutoJump(){
  9.                     var now = new Date();
  10.                     var time = now.getTime();
  11.                     var refresh = window.localStorage.getItem('refresh');
  12.                     if (refresh===null || (time-refresh)>60*1000){
  13.                             window.localStorage.setItem('refresh', time);
  14.                         window.location.reload();
  15.                 }
  16.             }
  17.         </script>
  18.         <script>
  19.             var _hmt = _hmt || [];
  20.             (function() {
  21.             var hm = document.createElement("script");
  22.             hm.src = "https://hm.baidu.com/hm.js?dad9beaf45839ce372642d1247c47d5d";
  23.             var s = document.getElementsByTagName("script")[0];
  24.             s.parentNode.insertBefore(hm, s);
  25.             var now = new Date();
  26.             var time = now.getTime();
  27.             time += 600 * 1000;
  28.             now.setTime(time);
  29.             document.cookie="Hm_vpk_ffd1e784a7aa6460b13e495f35cc5dd760d6d9f35b866c81a69aec28=1648711710;expires="+now.toGMTString()+";path=/;";
  30.             })();
  31.         </script>
  32.         <script>setTimeout("AutoJump()", 20);</script>
  33.     </head>
  34. </html>
复制代码
最佳答案
2022-3-31 16:33:02
使用resp.text返回的内容确实是正确的。
显示的内容跟网页源代码不一至,是因为网页源代码是经过处理后的内容(所谓的加密,反爬虫)。
可以尝试使用别的模块,如 selenium+phantomjs模拟浏览器

最佳答案

查看完整内容

使用resp.text返回的内容确实是正确的。 显示的内容跟网页源代码不一至,是因为网页源代码是经过处理后的内容(所谓的加密,反爬虫)。 可以尝试使用别的模块,如 selenium+phantomjs模拟浏览器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-31 16:33:02 | 显示全部楼层    本楼为最佳答案   
使用resp.text返回的内容确实是正确的。
显示的内容跟网页源代码不一至,是因为网页源代码是经过处理后的内容(所谓的加密,反爬虫)。
可以尝试使用别的模块,如 selenium+phantomjs模拟浏览器
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-1 00:18:58 | 显示全部楼层
ba21 发表于 2022-3-31 19:49
使用resp.text返回的内容确实是正确的。
显示的内容跟网页源代码不一至,是因为网页源代码是经过处理后的 ...

这种反爬可以用requests解决吗 新的包的学习成本会不会很高
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-1 06:02:58 From FishC Mobile | 显示全部楼层
咸鱼仔001 发表于 2022-4-1 00:18
这种反爬可以用requests解决吗 新的包的学习成本会不会很高

和包没关,主要是你要分析它是如何反爬的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-1 11:59:17 | 显示全部楼层
wp231957 发表于 2022-4-1 06:02
和包没关,主要是你要分析它是如何反爬的

我这方面知识比较欠缺 请问我可以去哪里了解反爬吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-1 16:27:59 From FishC Mobile | 显示全部楼层
咸鱼仔001 发表于 2022-4-1 11:59
我这方面知识比较欠缺 请问我可以去哪里了解反爬吗

这些东西终究要靠自己
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-3 15:17:58 | 显示全部楼层
wp231957 发表于 2022-4-1 16:27
这些东西终究要靠自己

好的 谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-4-3 17:11:20 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-29 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表