首页 > 编程问答 >Python 网络抓取与请求和美丽的汤被需要 javascript 阻止

Python 网络抓取与请求和美丽的汤被需要 javascript 阻止

时间:2024-08-05 15:04:47浏览次数:9  
标签:javascript python web-scraping jupyter

我正在尝试从网站上抓取文本。我使用简单的代码:requests.get(url_here)。我的代码直到最近才有效。现在,当我使用请求时,我收到一条消息,而不是获取网站的文本:

“该网站需要启用 JavaScript!您使用的浏览器不支持 JavaScript,或者已关闭 JavaScript。 “

我已验证我的浏览器确实启用了 JavaScript。有没有办法解决这个问题?

在 Mac 上使用 Jupyter 笔记本使用 Python 工作,供参考。


当网站依赖 JavaScript 来呈现其内容,而你使用 requests.get() 之类的库时,你只是在获取初始 HTML 源代码,它可能还没有你想要的文本。这是因为 requests 库不执行 JavaScript。

为了抓取需要 JavaScript 的网站,你需要一个可以执行 JavaScript 并呈现网页的工具,就像真正的网络浏览器一样。以下是两种流行的选项:

1. 使用无头浏览器(Headless Browser)

无头浏览器是在没有图形用户界面的情况下运行的网络浏览器,可以由程序控制。你可以使用它们来加载网站、运行 JavaScript 并提取呈现的内容。以下是一些流行的无头浏览器选项:

  • Selenium: Selenium 最初是用于网络应用程序测试的工具,但也非常适合网络抓取。它允许你控制一个真正的浏览器(如 Chrome 或 Firefox),让你可以像人类用户一样与网站进行交互。

    ```python from selenium import webdriver from selenium.webdriver.chrome.options import Options from bs4 import BeautifulSoup

    url = '你的网站地址'

    options = Options() options.add_argument('--headless=new') # 在无头模式下运行 Chrome options.add_argument('--disable-gpu') # 可选,用于无头模式

    with webdriver.Chrome(options=options) as driver: driver.get(url) html = driver.page_source

    soup = BeautifulSoup(html, 'html.parser')

    # 现在你可以使用 BeautifulSoup 解析内容了 print(soup.get_text()) ```

  • Playwright: Playwright 是另一个强大的库,可以自动化 Chromium、Firefox 和 WebKit 浏览器。它以其速度、可靠性和跨浏览器支持而闻名。

    ```python from playwright.sync_api import sync_playwright from bs4 import BeautifulSoup

    url = '你的网站地址'

    with sync_playwright() as p: browser = p.chromium.launch(headless=True) page = browser.new_page() page.goto(url) html = page.content() browser.close()

    soup = BeautifulSoup(html, 'html.parser')

    # 现在你可以使用 BeautifulSoup 解析内容了 print(soup.get_text()) ```

2. 使用渲染 JavaScript 的请求库

  • Requests-HTML: 如果你不想使用完整的浏览器,可以使用像 requests-html 这样的库,它提供了在进行请求时渲染 JavaScript 的功能。

    ```python from requests_html import HTMLSession from bs4 import BeautifulSoup

    url = '你的网站地址'

    session = HTMLSession() response = session.get(url)

    # 渲染 JavaScript response.html.render()

    soup = BeautifulSoup(response.html.html, 'html.parser')

    # 现在你可以使用 BeautifulSoup 解析内容了 print(soup.get_text()) ```

选择正确的方法

  • 如果你需要与网站进行复杂的交互,例如点击按钮、填写表单或与动态内容交互,那么 Selenium 或 Playwright 等无头浏览器是更好的选择。
  • 如果你只是需要渲染 JavaScript 来获取最终的 HTML 内容,那么 requests-html 可能是一个更轻量级的选择。

请记住,使用这些技术时要小心,并尊重网站的 robots.txt 文件,以避免给其服务器造成过大的负担。

标签:javascript,python,web-scraping,jupyter
From: 65361184

相关文章

  • python实现局域网及广域网私人聊天(Socket库局域网应用)
    引言在当今这个数字化时代,即时通讯已成为我们日常生活的一部分。无论是通过手机还是电脑,人们都在寻找更高效、更私密的沟通方式。想象一下,在你自己的局域网内,与朋友或同事建立一个专属的聊天室,无需担心数据泄露或者被第三方监听。本文将引导你从零开始,利用Python和Socket库......
  • 使用 python 抓取网页
    我有以下网页</div><ahref="https://www.emag.ro/laptop-lenovo-thinkbook-15-iil-cu-procesor-intel-core-i7-1065g7-pana-la-3-90-ghz-15-6-full-hd-16gb-512gb-ssd-intel-iris-plus-graphics-free-dos-mineral-grey-20sm003jrm/pd/DKBK1TMBM/#reviews-section&......
  • Python:需要有关类方法的帮助
    我有一个类“Duck”和“Dog”,如下所示:classDuck:defquack(self):print("quack")classDog:defbark(self):print("Ijustbark")以两种方式定义了另一个类并启动:case:1classItQuacks:def__init__(self,animal):......
  • 查找分层股东关系:在 python 中重构嵌套 if
    我想找到公司之间的股东关系。在下面的示例中,“人员1”直接拥有“公司1”50%的股份,那么需要检查“公司1”是否也拥有其他公司的股份。“公司1”拥有“公司2”50%的股份,“公司3”拥有20%的股份。这意味着“人员1”间接拥有“公司2”和“公司3”的部分股份。此......
  • 解决Python的pip问题:WARNING: Retrying (Retry(total=1, connect=None, read=None, re
    相关:pip安装第三方库报错Retrying(Retry(total=1,connect=None,read=None,redirect=None,status=None))国内镜像源下载常用国内源:清华:https://pypi.tuna.tsinghua.edu.cn/simple/阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.u......
  • Python,volcengine-python-sdk,安装失败,提示which is required to install pyproject.to
    问题描述:我是安装截止20240804发布的最新版本,volcengine-python-sdk-1.0.94.tar.gz报错一报错最后提示:whichisrequiredtoinstallpyproject.toml-basedprojects...note:Thiserrororiginatesfromasubprocess,andislikelynotaproblemwithpip.ERROR:Fai......
  • python_wholeweek3
    目录子函数的使用函数的定义嵌套的使用全局定义和局部定义子函数的使用函数的定义##############函数的三种定义方式##比较两个数大小,max是内置关键字,##第一种定义方式,无参函数#defself_max():#x,y=10,20##ifx>y:#print(x)#el......
  • Python实现简单的情感分析应用
    Python实现简单的情感分析应用情感的力量:走进情感分析的世界什么是情感分析:从日常对话到大数据分析情感分析的应用场景:从社交媒体到客户服务为何Python成为情感分析的最佳拍档准备工作:Python环境与必备库Python安装指南:快速搭建开发环境必不可少的库:nltk与TextBlob的简......
  • Python中的Web开发与API设计
    Python中的Web开发与API设计一、开篇:启航PythonWeb开发之旅1.1Python:不仅仅是脚本语言,更是Web开发的明星1.2Web开发的魔法森林:从静态到动态的转变二、基础篇:PythonWeb开发的基石2.1HTTP协议:互联网通信的通用语言2.2Flask框架:轻装上阵的小巧之选2.3Django框架:全......
  • Python实现简单的模型调优技术
    Python实现简单的模型调优技术一、开篇:模型调优的魅力所在1.1模型调优:不只是参数游戏1.2为什么好的模型也需要调优二、基础篇:理解模型调参的必要性2.1模型评估指标:选择合适的尺子2.2常见调参方法:从手动到自动化2.3验证集的重要性:不要让模型裸奔三、实战篇:动手......