我正在尝试使用模块从这个网页中获取不同容器的标题和链接requests,但我找不到任何方法来做到这一点。我试图找到任何通常出现在开发工具中的隐藏 API,但我失败了。我注意到在不同的时候,动态生成的内容大部分时间都在某些脚本标签中可用。但是,在这种情况下,我也找不到其中的内容。作为最后的手段,我使用 Selenium 来获取它们。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
link = 'https://www.firmy.cz/kraj-praha?q=prodej+kol'
def get_content(url):
driver.get(url)
for item in wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,'.companyDetail'))):
item_link = item.find_element_by_css_selector("h3 > a.companyTitle").get_attribute("href")
item_title = item.find_element_by_css_selector("span.title").text
yield item_link,item_title
if __name__ == '__main__':
with webdriver.Chrome() as driver:
wait = WebDriverWait(driver,10)
for item in get_content(link):
print(item)
Run Code Online (Sandbox Code Playgroud)
脚本产生的结果如下:
('https://www.firmy.cz/detail/12824790-bike-gallery-s-r-o-praha-vokovice.html', 'Bike Gallery s.r.o.')
('https://www.firmy.cz/detail/13162651-bikeprodejna-cz-praha-dolni-chabry.html', 'BIKEPRODEJNA.CZ')
('https://www.firmy.cz/detail/406369-bikestore-cz-praha-podoli.html', 'Bikestore.cz')
('https://www.firmy.cz/detail/12764331-shopbike-cz-praha-ujezd-nad-lesy.html', 'Shopbike.cz')
Run Code Online (Sandbox Code Playgroud)
如何使用请求模块获取相同的结果?
在这里,我有一个视图CrawlerHomeView,用于从表单创建任务对象,现在我想用 celery 定期安排此任务。
我想CrawlerHomeView用任务对象 search_frequency 并通过检查一些任务对象字段来安排这个过程。
任务模型
class Task(models.Model):
INITIAL = 0
STARTED = 1
COMPLETED = 2
task_status = (
(INITIAL, 'running'),
(STARTED, 'running'),
(COMPLETED, 'completed'),
(ERROR, 'error')
)
FREQUENCY = (
('1', '1 hrs'),
('2', '2 hrs'),
('6', '6 hrs'),
('8', '8 hrs'),
('10', '10 hrs'),
)
name = models.CharField(max_length=255)
scraping_end_date = models.DateField(null=True, blank=True)
search_frequency = models.CharField(max_length=5, null=True, blank=True, choices=FREQUENCY)
status = models.IntegerField(choices=task_status)
Run Code Online (Sandbox Code Playgroud)
任务.py
如果任务状态为 0 或 1 且未超过任务抓取结束日期,我想定期运行下面发布的视图 [期间 =(任务的搜索频率时间])。但我卡在这里了。我该怎么做?
@periodic_task(run_every=crontab(hour="task.search_frequency")) # how …Run Code Online (Sandbox Code Playgroud) 在 go 中实现了从给定 URL 获取信息的逻辑,问题是 net/http 的响应为空。
package main
import (
"fmt"
"io/ioutil"
"net/http"
)
func main() {
resp, err := http.Get("https://azure.microsoft.com/en-us/")
if err != nil {
// handle error
}
body, err := ioutil.ReadAll(resp.Body)
bodyString := string(body)
fmt.Print(bodyString)
fmt.Printf("%v %v", body, err)
}
Run Code Online (Sandbox Code Playgroud)
输出:它返回空切片而不是返回 HTML 内容
[]byte{} <nil>
Run Code Online (Sandbox Code Playgroud)
我正在使用 Go 版本 1.14.3。
我正在创建一个供个人使用的网络抓取工具,它根据我的个人输入抓取汽车经销商网站,但我尝试从被重定向验证码页面阻止的几个网站收集数据。我正在用 curl 抓取的当前站点返回此 HTML
<html>
<head>
<title>You have been blocked</title>
<style>#cmsg{animation: A 1.5s;}@keyframes A{0%{opacity:0;}99%{opacity:0;}100%{opacity:1;}}</style>
</head>
<body style="margin:0">
<p id="cmsg">Please enable JS and disable any ad blocker</p>
<script>
var dd={'cid':'AHrlqAAAAAMA1gZrYHNP4MIAAYhtzg==','hsh':'C0705ACD75EBF650A07FF8291D3528','t':'fe','host':'geo.captcha-delivery.com'}
</script>
<script src="https://ct.captcha-delivery.com/c.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我正在使用它来抓取页面:
<?php
function web_scrape($url)
{
$ch = curl_init();
$imei = "013977000272744";
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_COOKIE, '_ym_uid=1460051101134309035; _ym_isad=1; cxx=80115415b122e7c81172a0c0ca1bde40; _ym_visorc_20293771=w');
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'imei' => $imei,
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec($ch);
return $server_output;
curl_close($ch);
}
echo web_scrape($url);
?> …Run Code Online (Sandbox Code Playgroud) 在标记为重复之前,请考虑我已经浏览了许多相关的堆栈溢出帖子,以及网站和文章。我还没有找到解决方案。
这个问题是这个问题的后续,Selenium Webdriver 没有找到 XPATH 尽管看似相同的字符串。我通过更新代码以更优雅的方式工作,确定问题实际上并非来自 xpath 方法:
for item in feed:
img_div = item.find_element_by_class_name('listing-cover-photo ')
img = WebDriverWait(img_div, 10).until(
EC.visibility_of_element_located((By.TAG_NAME, 'img')))
Run Code Online (Sandbox Code Playgroud)
这适用于前 5ish 元素。但是在那之后它超时了,通过获取 img_div 的内部 html 并打印它,我发现对于超时的元素,而不是我想要的图像,有一个带有“lazyload-placeholder”类的 div。这导致我抓取延迟加载的元素,但我找不到答案。如您所见,我正在使用 WebDriverWait 尝试为其加载时间,但我也尝试了站点范围的等待调用以及 time.sleep 调用。等待似乎并不能解决它。我正在寻找处理这些延迟加载图像的最简单方法,最好是在 Selenium 中,但如果有其他库或产品可以与我已经拥有的 Selenium 代码一起使用,那就太好了。任何帮助表示赞赏。
我正在尝试从网页中的表格中获取一些动态值。此图像表示我希望从该页面获取的值。应该有任何方法可以使用请求来获取它们。为了让您知道,我在开发工具中查找了任何隐藏的 api,还通过页面源代码中的脚本标签查找了值,但我找不到。
这是网站网址
这是我所追求的预期输出。
这是我到目前为止写的:
import requests
from bs4 import BeautifulSoup
url = "https://www.dailyfx.com/sentiment"
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; ) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'}
r = requests.get(url,headers=headers)
soup = BeautifulSoup(r.text,"lxml")
for items in soup.select(".dfx-technicalSentimentCard__barContainer"):
data = [item.get("data-value") for item in items.select("[data-type='long-value-info'],[data-type='short-value-info']")]
print(data)
Run Code Online (Sandbox Code Playgroud)
上面的脚本产生如下的空输出:
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
['--', '--']
Run Code Online (Sandbox Code Playgroud)
如何使用请求从该表中获取值?
大家好,我在从应用商店获取此页面的数据时遇到了一些问题: 应用商店评论https://apps.apple.com/us/app/mathy-cool-math-learner-games/id1476596747#see-all /评论
我想首先检索一个字符串,该字符串显示用户对应用程序的评分。它们位于 class = "we-star-rating ember-view we-customer-review__rating we-star-rating--large" 的图形标签内,并且是属性@aria-label 的名称。
这是我的代码:
from scrapy import Selector
import requests
html = requests.get('https://apps.apple.com/us/app/mathy-cool-math-learner-games/id1476596747#see-all/reviews').content
sel = Selector(text = html)
sel.xpath('//figure[@class="we-star-rating ember-view we-customer-review__rating we-star-rating--large"]/@aria-label').extract()
Run Code Online (Sandbox Code Playgroud)
但它只返回前 3 场比赛:
['5 out of 5', '5 out of 5', '5 out of 5']
Run Code Online (Sandbox Code Playgroud)
我想要的是从该页面的所有评论中检索所有可用的评分。
有人可以给我一个线索吗?
我试图从这个页面上刮掉符号,https://www.barchart.com/stocks/indices/sp/sp400? page =all
当我在 Firefox 浏览器中查看源代码(使用 Ctrl-U)时,没有任何符号出现。想着也许Selenium 可以获取动态表,我运行了以下代码。
sp400_url= "https://www.barchart.com/stocks/indices/sp/sp400?page=all"
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.get(sp400_url)
html = driver.page_source
soup = BeautifulSoup(html)
print(soup)
Run Code Online (Sandbox Code Playgroud)
打印命令不会显示我们在页面上看到的任何符号。有没有办法从这个页面刮掉符号?
编辑澄清:我只对符号感兴趣,而不是价格。所以列表应该是:AAN、AAXN、ACC、ACHC、...
我正在尝试抓取一个特定站点 ( https://chartink.com/screener/test-121377 ) 我正在尝试访问 URL 中提供的表。该表可以是动态形式。该站点启用了 JS,因此尝试 HTML 抓取是多余的。接下来,我尝试使用 cURL 访问 XHR 元素,它确实有效。我使用了以下代码:
import requests
headers = {
'authority': 'chartink.com',
'pragma': 'no-cache',
'cache-control': 'no-cache',
'accept': 'application/json, text/javascript, */*; q=0.01',
'x-csrf-token': 'HYMZ6XnOySvn1w4fHEN0Hu1ublftvidgdBD5qywR',
'x-requested-with': 'XMLHttpRequest',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36',
'sentry-trace': 'd9b8f7ffcae445f7a74913d5ac143918-9fa7556ebb76186c-0',
'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
'origin': 'https://chartink.com',
'sec-fetch-site': 'same-origin',
'sec-fetch-mode': 'cors',
'sec-fetch-dest': 'empty',
'referer': 'https://chartink.com/screener/test-121377',
'accept-language': 'en-IN,en;q=0.9,hi-IN;q=0.8,hi;q=0.7,en-GB;q=0.6,en-US;q=0.5',
'cookie': '_ga=GA1.2.468738165.1600680012; remember_web_59ba36addc2b2f9401580f014c7f58ea4e30989d=eyJpdiI6Inp6YWdERUJHSGxoWmhRaE00MGhONHc9PSIsInZhbHVlIjoiSXN1d09PXC9USmpGb2lFR21naFd1Q3RlcCtKSDdUXC8zdGRnMkRoQmNcL2loXC9tT0tMXC9sc0JtallJVCtNczVhVjhIdGUyb0xqMTIydlc0RWtQYVZcLzF1aFd3aXRPM0M3MDVObUtNK1FtdmJtZjY1YUxNbTlyTHhNWFhjU3VZNXpUTWY0SjZ4M1o1VEcydk1DWDY5YWVSdWRjbVwvQmkyYmlDT2VMWFVCM043Y2JIY21UTjNsdnJLaE1qSnNybmM2WVhISyIsIm1hYyI6IjhlNjBiZWUxMWU3NTBkOTRjM2NlYTZiNGI3YzJhYjg4M2E0OWI2MDU3ZDZkYWUzNzE1YjYxOTRhMTllMjY2ZWQifQ%3D%3D; __utmc=102564947; PHPSESSID=e3797d9e58f9f56b0307e7840f6839f7; bfp_sn_rf_8b2087b102c9e3e5ffed1c1478ed8b78=Direct/External; bfp_sn_rt_8b2087b102c9e3e5ffed1c1478ed8b78=1601299430046; bafp=d8afd2b0-018d-11eb-b966-a1985446bf25; hbcm_sd=1%7C1602315380999; _gid=GA1.2.729526333.1602491131; __utma=102564947.468738165.1600680012.1601134509.1602499714.2; __utmz=102564947.1602499714.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); XSRF-TOKEN=eyJpdiI6InVXSEFpN2xiYWZqWDkzNEdWZVBTSkE9PSIsInZhbHVlIjoiQlM2eVBYMjdYR3N4QTh6YmtFWmNoTUtOVHBIOFVoUG04WTdcL05iUm4yZExQR3ZucHlPVHhucVwvbjlHTW9VcmZCIiwibWFjIjoiMWEyMzViZDQ5YWI1YzIzY2UzYTdkNzRlN2UyZmYzNmY1ZWNkYTBmZmJmOWI2YjZmOGRmN2U2Y2IzOGE5ZmQwNiJ9; ci_session=eyJpdiI6ImtcLzNBOGxOb1l2bFlyOEFnQ2dxVHNBPT0iLCJ2YWx1ZSI6IjRpNVhXOWtGZlV0TWdwZlhIVGRmWFgrcGFyblwveGlkdVU5aHJraVdvbFROOURUa2Zhc2pcLzJNOE9qa0FwcjlwbSIsIm1hYyI6IjVlYTUwNDgxN2U0NTU4OWE0NTgxOTMwNjNjMzdhM2Q5MjRiMjJjMTBkYzI0ZTdkOTg1YTg5YmIxNTM3NzFlMDQifQ%3D%3D',}
data = …Run Code Online (Sandbox Code Playgroud) 我想从 JSON 响应中抓取一些数据。这是链接
我需要lessonTypes. 我想导出所有用逗号分隔的值。所以Theorieopleidingen有 4 个值Beroepsopleidingen有 8 个等等。
我想动态刮取,所以即使值的数量发生变化,它也总是用逗号分隔所有刮擦。
对不起,如果我的解释是周。
web-scraping ×10
python ×5
python-3.x ×3
scrapy ×2
selenium ×2
ajax ×1
app-store ×1
celery ×1
curl ×1
django ×1
django-views ×1
go ×1
html ×1
ios ×1
json ×1
lazy-loading ×1
php ×1
recaptcha ×1
webdriver ×1