鱼C论坛

 找回密码
 立即注册
查看: 1070|回复: 5

[已解决]python爬虫

[复制链接]
发表于 2023-8-1 12:54:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import requests
from bs4 import BeautifulSoup

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36"
}

response = requests.get("https://note.ms/liu2023", headers=headers)
soup = BeautifulSoup(response.text, "lxml")
with open("response.html", "w") as f:
    f.write(soup.prettify())

爬取到的结果:
<!DOCTYPE html>
<html lang="en-US">
 <head>
  <title>
   Just a moment...
  </title>
  <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
  <meta content="IE=Edge" http-equiv="X-UA-Compatible"/>
  <meta content="noindex,nofollow" name="robots"/>
  <meta content="width=device-width,initial-scale=1" name="viewport"/>
  <link href="/cdn-cgi/styles/challenges.css" rel="stylesheet"/>
 </head>
 <body class="no-js">
  <div class="main-wrapper" role="main">
   <div class="main-content">
    <noscript>
     <div id="challenge-error-title">
      <div class="h2">
       <span class="icon-wrapper">
        <div class="heading-icon warning-icon">
        </div>
       </span>
       <span id="challenge-error-text">
        Enable JavaScript and cookies to continue
       </span>
      </div>
     </div>
    </noscript>
   </div>
  </div>
  <script>
   (function(){window._cf_chl_opt={cvId: '2',cZone: 'note.ms',cType: 'managed',cNounce: '99612',cRay: '7efb73dd3fc02792',cHash: 'd05f86be02f34c9',cUPMDTk: "\/liu2023?__cf_chl_tk=T4wJrBt5kvKa3Y_lOwLhgFaKqYS.7SHjad.qXnMgUO0-1690865346-0-gaNycGzNCuU",cFPWv: 'b',cTTimeMs: '1000',cMTimeMs: '0',cTplV: 5,cTplB: 'cf',cK: "",fa: "/liu2023?__cf_chl_f_tk=T4wJrBt5kvKa3Y_lOwLhgFaKqYS.7SHjad.qXnMgUO0-1690865346-0-gaNycGzNCuU",md: "zc6bJ_KTsaDwdNAJtJZHEcId6LADx.kjtZ90I4KI7mI-1690865346-0-AbvtTf0qPnqpkxop_FnT--gUqT8i8h2q6gbLCpgF7mWx7GzhC7_G5nojI2ChPx7VMZySg8DYlxv7DZqV3zKRLn1_7r9PCb-s7wh18ZXP2v0BD2EpGzDZr-Je4N6gfB_tKvM9vEZB-PKt2yb_pltVYi49rNSB3CfFisDVdUtK4Pc57ACpWNpdCUsJD8gR7oSuRCjBcrT3qQVwsVV0Gv4U97M2JlUxT9v0v1twYBMVlP1bBX9A4rAVHS88SFwiH-7FfdcpJGfA0xUhziChRhRUo84r3xgVs7KZTedkaL0L1d5obOF7RwHCKHBS37cxrvakZrN2BJFX_O-B2maqU3KcwAmdiKPOGxZtUaGauL0l8A9VZ8RK_WHyjgR-LsuDHN9y_9gt-3ZaM4XwnSRteB9BvjMqXSgXATZNb5BorAna3vjPVtq-_HmSxB1SxjyEbXyYbu9UdatlNPy3ELk_uSIvy3wihjeZoNzWe-qyWgzBBwJrEJbJQzhmw3jPioVTTSkJ2bq9NDkGfpCAmVCF7q_pbPUHARlox4iXGIChoEpEJfU2oxYXEkLnrDbZ_BB8_3yvCY4osoxZiDqQ6SmFhSxBxE4JEuxwC7zENppSQobEpJ9lio-iY61DLVzDpmrSKbhk_RIiH0wnVbPUaCmOspx_WifBNLLgvixF7Q5YqHnIyXo2sjv6tafZ1Cky2FR6sqY6J-1yABUQ6koPN8lU4_uW0P-pY9b2534Lpa12hzRD4aX-rorSSNulf2kHth7Wnmwno4a4_iSFPx3X3DkYq4FfK_BSoV1790ZSsMJrzcCawe5hwL84bC6rgxq6TNl3jtLSXMZmxEz2pR2DuXf9u4Ik5RvnLi-kDFl4aa8GgI0KbLLRUiueqOhQyGf72etxlPxkNWKy2z420_d227Zq5zfRsYlH-3mE38y3X08VLiA1k7JQgD9gB6jHYblOL3B2Me0n3e3L0RdD0d2e38Z80OLMFe7_2mBcyEcpDBgely1qeqqHNyrTbPOsWZCJsdwu8I5LJGYi_fMFYGeJZIwxKt_Nqy8RlzsW7wY7Qb_xKIwSxGmD-oHjWO-k9NL07EGnIQUNKb7yv-CxMAY9x7pZ_Wc3RPsbsoNxVpfSYOkBbvPajuurUD9eEyU7d4lsctK4_P12wnzXB4Qd-XoJXaneODiMJvieRK8yyVKl6tn8-21tIS_X7Y7o3EwR6PffHCTambPAXGxDD7gW3fDGGR3rale5Rm0QoFJ6l4uwssXoE685Qcl1EMznad0Ejv4uhrk88FXyVZUH7U35z4g5W66FbzZ7yH2Wg1WlR1V6VGLkFdC5q-LuXzjzElbd7nI3WZEh6ksKiYfgUXiZhDE5875sONfq6In_Xyp14qf4cQxQIX98X8T4XKp1z0NF6bADZdSnZ3nvwSxAkR92gZ8_fYm0IAUVkNqmLxtEyF-gxAwjj-cHp07EkI2H3337S7RMjdR7NZhSM05ckou_vcW96tBKATjhNUSgP1zJwIlNB3NkcNKL-D76VMkI-rydSUoWnTXkk56uGBv8XZ_ajlfs44rstrPU-X9I12kKSpMGOKEFFAIgXzuRvSgHtYbK3QhsCQVzRKN6x4Dsdr12JyNuspj6pJx60frQPwACWbMrvjJNww2mMFMHXSD-LfvbHm_o_inbkiT5r_QsT3ywSVeH9GFM-gnjnodDJy1QxnCALlOiEHbQvMOEW78IbFP2t6dKXs0sPMohNiV6a6fRo6YuJKD4gybL_1IYCOHBDPFFYl1w1KgHCJkYBA7NJPOv2GCt1iOrQIgwz175Fs10Dp3-_kNzdmPlGPNFg8AKdGfiaNeNJ2GLdQdgyHZP-WgSuAbcBPEmIrEARFeJ0VrovxjrEM0QTP2MpepMe5beJ62qU4idb0ZglN3zDOtKDZy4H3ADvjgFt_PCVGmYutMOnFIXiU3E24HSeuhlIfkwEPwCjSHSoucEypEvFUUrsJFVoCGndNvLF4Qymw4XAUcvWSIXsUmqMTh1-zKDQxD0wlV4SJ9Z_KwZEd3Zl2q8PLvdEq5kCll_yvDpZ6uSLXwS3USLHC38RnKSx3Qh5dJYfxcDG7v9BD3SORip6LvqJUHJLpHvhfM3FC6mGlYUDmzzGY2qDZF1IzUJ3yUOfRYdHItiVoFMbDLEBDB4_BP_tkrIBbWTlCoMtU4uoV3z6Smh3usYdQO42ZC97uQAQ-4Wg1aOPY2CN142Z6Zuvr0tXirCsSSfh4_DLFo0SL9YIwinVBR7xAoA_WYjehi0q5Y_2hZV3aPDHrbZNJhKgNFOskuZA-2jofd_APAZPjXCG9UNTCUnEWnsqPEhhXWNJZZqowMFFXR9Mhp74VkcRunmCa7FD5IpCpySPPkAkA1F1KSc8EVrW0SOpQjD_T0-PNg-Gk-jg-AA1dB6yF9ZMGT7du6G1vkjYaa5j6DtochLTthyAN-n8ExbO91izL3nPri4zDQIXFDaX8l6610bVepXsDu8vua5NGjcc8ENcxtjshFcLKjkOx7mHKHcKNipw7fglVf_XzGm5tigI68hF0IlPC3kiY8AN7l7QWHVxTmtQ4I7LdDtFSNk_3kqQSwv6jh4iPWo2nNp3s6SQvU2oY19fxqRtBt4c_DdIf_RKmXPg4KVeRhUt-Ve8W3Oi2D_cxi8KCSGTNF6LXBAk7IbgCGq0YYOElMLUTMkuKPO8wlWYxGTq5-1MYm1CUNh4-7Ygq8KdkU37eo8s2_lwBGt",cRq: {ru: 'aHR0cHM6Ly9ub3RlLm1zL2xpdTIwMjM=',ra: 'TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzExNy4wLjAuMCBTYWZhcmkvNTM3LjM2',rm: 'R0VU',d: 'VQH8oNQh7RvVNLbHm8XuFnMbRS8nimQrjuXJ4qxylVjgOZY+hwaCiZOxpzFf2ddsKFrLAZw5mQipUlIf4CBzeGbXXDigyxTaNbI+VqdZRWxAs2Vp

NnAn1Ketpodiw15P4aioysMdkT1ume4WIDKk/CxaFNYH9ICkrhBQcQNbpdx+C0PDuq/vfqIwszEdz/tcj1mjnzop9gvGoRi0dlnAEMB3K0ToK7pJ+6WKjblpeVxbv5lajq4W/OHk2gElDXUSEaTXK8yOdTQ97Rt949wkNeO+qVST45DhFpo7t07tht+03udS9s9FNvtj1kZM6uvs9wjFEti+GuwBFafJYeFbwIsvBhnn8mOP6dq77f/QnDPkbS49fkRyAGgvNWbOTukkArQAtPRrvXPTfpBU2iQ5Xix2QUUskS1gpkB495Pg1vejfBj9E06RIpr9SWW/x1j+HWEN3ZGZTcFYv5rzdnr4SOa+Fx+oWhc7YvjkxndhE7a25bwXRtrR4d7QiQ4MvBixDI5T/ct5QzeU/pXiqN79lr9AwgBKT2kPeXSDupo3IF83mkKvGNvPKwz2R++39Gzr',t: 'MTY5MDg2NTM0Ni4xMTQwMDA=',cT: Math.floor(Date.now() / 1000),m: '98D6sA6uHb+FQiK19Ianh3IJL0ULeGvaL4t/FvBl7WA=',i1: '/YuIIL4LKT+qMLIWVLRZWw==',i2: 'F8XfniEgGRSQs6K02qM1vA==',zh: 'FXLOuMcflenoGWSXNHphMdrow+43VlIE6GoJUz6N6y0=',uh: 'wh0E0SXYnx6pTBdJW/l926I+PRUplRdtQz3K9lHXs/s=',hh: '2U/XHILyR4b8Pj+rdC/0tYF0II4RTXdjikYjDeErd/E=',}};var cpo = document.createElement('script');cpo.src = '/cdn-cgi/challenge-platform/h/b/orchestrate/chl_page/v1?ray=7efb73dd3fc02792';window._cf_chl_opt.cOgUHash = location.hash === '' && location.href.indexOf('#') !== -1 ? '#' : location.hash;window._cf_chl_opt.cOgUQuery = location.search === '' && location.href.slice(0, location.href.length - window._cf_chl_opt.cOgUHash.length).indexOf('?') !== -1 ? '?' : location.search;if (window.history && window.history.replaceState) {var ogU = location.pathname + window._cf_chl_opt.cOgUQuery + window._cf_chl_opt.cOgUHash;history.replaceState(null, null, "\/liu2023?__cf_chl_rt_tk=T4wJrBt5kvKa3Y_lOwLhgFaKqYS.7SHjad.qXnMgUO0-1690865346-0-gaNycGzNCuU" + window._cf_chl_opt.cOgUHash);cpo.onload = function() {history.replaceState(null, null, ogU);};}document.getElementsByTagName('head')[0].appendChild(cpo);}());
  </script>
 </body>
</html>

(其中的换行是因为 v  p n是敏感词
最佳答案
2023-8-1 13:10:52
requests不行,里面执行了js代码,用selenium
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-1 12:54:47 | 显示全部楼层
这段爬虫代码似乎是用 Python 进行网页爬取的,但在请求网页时可能被服务器拦截,导致返回了一个 JavaScript 做防护的页面,而不是所需的真实内容。这是因为网站可能采取了反爬虫措施,阻止了简单的爬虫访问。

要解决这个问题,您可以尝试以下方法:

1. 使用浏览器模拟: 有时,网站会根据浏览器的 User-Agent 等信息来判断是否为真实用户访问。您可以尝试更改 User-Agent,将其设置成类似浏览器的信息,以模拟真实用户的请求。

2. 添加延迟: 在爬取时添加一些延迟,模拟真实用户的访问行为。如果请求过于频繁,服务器可能会拒绝响应或返回验证码等防护页面。

3. 处理 JavaScript 渲染: 使用第三方工具,如 Selenium 等,模拟浏览器的运行来处理 JavaScript 动态渲染的页面。

4. 检查网站的 robots.txt 文件: 确保您的爬虫遵守网站的 robots.txt 文件规定,以免触犯网站的爬虫规则。

5. 考虑使用 API: 如果网站提供 API 接口,使用 API 获取数据可能更加稳定和合法。

请注意,在进行网页爬取时,一定要尊重网站的规则和服务条款,避免对网站造成过度压力或侵犯其利益。如果网站明确禁止爬取或没有提供 API 接口,请尊重其隐私权和版权等规定,避免非法行为。

最后,有些网站设置了较为复杂的反爬虫措施,可能需要更多高级技术来绕过防护。但在进行这类操作时,一定要慎重考虑,确保符合法律和道德标准。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 12:54:50 | 显示全部楼层
根据你提供的代码和爬取结果,你遇到了Cloudflare的反爬虫机制。该网站使用了JavaScript挑战来验证访问者是否是真人用户而不是爬虫程序。

要解决这个问题,你可以尝试以下方法:

1. 使用Selenium:Selenium是一个自动化测试工具,可以模拟浏览器行为。你可以使用Selenium来加载页面并绕过Cloudflare验证。你需要下载对应浏览器的驱动,并在代码中配置使用Selenium进行页面加载。

2. Bypass Cloudflare:有一些第三方库可以帮助你绕过Cloudflare验证,例如cfscrape和cloudscraper。这些库会自动处理Cloudflare验证步骤,使你能够成功获取网页内容。

下面是使用cfscrape绕过Cloudflare验证的代码示例:
import cfscrape

scraper = cfscrape.create_scraper()
url = "https://note.ms/liu2023"
response = scraper.get(url)
content = response.content

# 在此处处理获取到的内容

请注意,使用这些绕过工具时,你仍然需要遵守网站的条款和条件。如果网站明确禁止爬取或未经许可使用其内容,你应该尊重这些规定。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 12:55:51 | 显示全部楼层
陶远航 发表于 2023-8-1 12:54
根据你提供的代码和爬取结果,你遇到了Cloudflare的反爬虫机制。该网站使用了JavaScript挑战来验证访问者是 ...

==================== RESTART: C:\Users\bruce\Desktop\test.py ===================
Traceback (most recent call last):
  File "C:\Users\bruce\Desktop\test.py", line 1, in <module>
    import cfscrape
  File "F:\Python399\lib\site-packages\cfscrape\__init__.py", line 19, in <module>
    from urllib3.util.ssl_ import create_urllib3_context, DEFAULT_CIPHERS
ImportError: cannot import name 'DEFAULT_CIPHERS' from 'urllib3.util.ssl_' (F:\Python399\lib\site-packages\urllib3\util\ssl_.py)
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-1 13:10:52 | 显示全部楼层    本楼为最佳答案   
requests不行,里面执行了js代码,用selenium
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-1 13:11:19 | 显示全部楼层
liuhongrun2022 发表于 2023-8-1 13:10
requests不行,里面执行了js代码,用selenium

智能版
from selenium.webdriver import *
from time import sleep
from datetime import datetime as d
from bs4 import BeautifulSoup

option = ChromeOptions()
option.add_argument("headless")
chrome = Chrome(options=option)
last_content = ""
while True:
    now = str(d.now()).replace(':', '_')
    now = now[:now.find(".")]
    chrome.get("https://note.ms/liu2023")
    sleep(1)
    soup = BeautifulSoup(chrome.page_source, "lxml")
    content = soup.select_one("textarea").text
    if content != last_content:
        with open(f"backup/{now}.txt", "w") as f:
            f.write(content)
    last_content = content
    sleep(9)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-25 22:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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