标签: web-scraping

Puppeteer:正确选择内部文本

我想获取一个具有特定类名的字符串,比如说“CL1”。

这是用来做的并且它起作用了:(我们在一个 asycn 函数中)

var counter = await page.evaluate(() => {
            return document.querySelector('.CL1').innerText;
        });
Run Code Online (Sandbox Code Playgroud)

现在,几个月后,当我尝试运行代码时,出现此错误:

Error: Evaluation failed: TypeError: Cannot read property 'innerText' of null
Run Code Online (Sandbox Code Playgroud)

console.log()在上一段代码前后做了一些调试,发现这是罪魁祸首。

我查看了网页的代码,里面有特定的类。

但是我发现了另外两个同名的类。

它们三个都嵌套在许多类的深处。

那么,鉴于我知道我感兴趣的那个的类层次结构,选择我想要的那个的正确方法是什么?

编辑:由于有三个同名的类名,我想从第一个中提取信息,我可以在 querySelector() 上使用数组表示法来访问第一个中的信息吗?

EDIT2:我运行这个:

return document.querySelector('.CL1').length;
Run Code Online (Sandbox Code Playgroud)

我得到了

Error: Evaluation failed: TypeError: Cannot read property 'length' of null
Run Code Online (Sandbox Code Playgroud)

这更令人困惑......

编辑 3:我尝试了 Md Abu Taher 的建议,我看到他提供的代码片段没有返回 undefined。这意味着选择器对我的代码可见。

然后我运行这段代码:

var counter = await page.evaluate(() => {
            return document.querySelector('#react-root > section > main > div > header > section > ul > …
Run Code Online (Sandbox Code Playgroud)

javascript node.js web-scraping puppeteer

-4
推荐指数
1
解决办法
4893
查看次数

使用中间件将重定向网址替换为原始网址后,无法以正确的方式发送请求

我使用 scrapy 创建了一个脚本来从网页中获取一些字段。登陆页面的 url 和内部页面的 url 经常被重定向,因此我创建了一个中间件来处理该重定向。然而,当我看到这篇文章时,我明白我需要return requestprocess_request()用原始网址替换重定向网址后。

meta={'dont_redirect': True,"handle_httpstatus_list": [301,302,307,429]}当请求从蜘蛛发送时,它总是存在的。

由于所有请求都没有被重定向,我尝试替换_retry()方法中的重定向网址。

def process_request(self, request, spider):
    request.headers['User-Agent'] = self.ua.random

def process_exception(self, request, exception, spider):
    return self._retry(request, spider)

def _retry(self, request, spider):
    request.dont_filter = True
    if request.meta.get('redirect_urls'):
        redirect_url = request.meta['redirect_urls'][0]
        redirected = request.replace(url=redirect_url)
        redirected.dont_filter = True
        return redirected
    return request

def process_response(self, request, response, spider):
    if response.status in [301, 302, 307, 429]:
        return self._retry(request, spider)
    return response
Run Code Online (Sandbox Code Playgroud)

问题:使用中间件将重定向的 url 替换为原始 url 后如何发送请求?

python middleware scrapy web-scraping python-3.x

-4
推荐指数
1
解决办法
618
查看次数

如何使用PHP登录网站并提取数据

我已经在计算机(Windows)上安装了微小的rss,还安装了Xampp(localhost)。

我希望能够使用PHP从Tiny小RSS页面提取数据。

我已经尝试过了,它只是打开了首页:

<?php
$homepage = file_get_contents('my install tiny tiny rss url');
echo $homepage;
?>
Run Code Online (Sandbox Code Playgroud)

但是,我该如何登录并提取数据。

php web-scraping

-5
推荐指数
1
解决办法
2146
查看次数

网页抓取程序找不到我可以在浏览器中看到的元素

我正在尝试使用 Requests 和 BeautifulSoup在https://www.twitch.tv/directory/game/Dota%202上获取流的标题。我知道我的搜索条件是正确的,但我的程序没有找到我需要的元素。

这是一个屏幕截图,显示了浏览器中源代码的相关部分:

显示部分网页的浏览器屏幕截图,以及使用开发人员工具/网络检查器的源代码。

作为文本的 HTML 源代码:

<div class="tw-media-card-meta__title">
  <div class="tw-c-text-alt">
    <a class="tw-full-width tw-interactive tw-link tw-link--button tw-link--hover-underline-none tw-link--inherit" data-a-target="preview-card-title-link" href="/weplayesport_en">
      <div class="tw-align-items-start tw-flex">
        <h3 class="tw-ellipsis tw-font-size-5" title="NAVI vs HellRaisers | BO5 | ODPixel &amp; S4 | WeSave! Charity Play">NAVI vs HellRaisers | BO5 | ODPixel &amp; S4 | WeSave! Charity Play</h3>
      </div>
    </a>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

import requests
from bs4 import BeautifulSoup

req = requests.get("https://www.twitch.tv/directory/game/Dota%202")

soup = BeautifulSoup(req.content, "lxml")

title_elems = soup.find_all("h3", attrs={"title": True})

print(title_elems)
Run Code Online (Sandbox Code Playgroud)

当我运行它时,title_elems …

python beautifulsoup web-scraping python-requests

-9
推荐指数
1
解决办法
629
查看次数