我想获取一个具有特定类名的字符串,比如说“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) 我使用 scrapy 创建了一个脚本来从网页中获取一些字段。登陆页面的 url 和内部页面的 url 经常被重定向,因此我创建了一个中间件来处理该重定向。然而,当我看到这篇文章时,我明白我需要return request在process_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 后如何发送请求?
我已经在计算机(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)
但是,我该如何登录并提取数据。
我正在尝试使用 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 & S4 | WeSave! Charity Play">NAVI vs HellRaisers | BO5 | ODPixel & 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 …
web-scraping ×4
python ×2
javascript ×1
middleware ×1
node.js ×1
php ×1
puppeteer ×1
python-3.x ×1
scrapy ×1