标签: web-scraping

无法使用请求从网页中获取某些字段

我正在尝试使用模块从这个网页中获取不同容器的标题和链接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)

如何使用请求模块获取相同的结果?

python web-scraping python-3.x python-requests

1
推荐指数
1
解决办法
105
查看次数

如何使用celery定期在django中安排我的爬虫功能?

在这里,我有一个视图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)

django django-views celery web-scraping

1
推荐指数
1
解决办法
938
查看次数

没有得到 HTTP Get 方法的响应

在 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。

go web-scraping

1
推荐指数
1
解决办法
63
查看次数

从网页中提取reCaptcha,通过cURL在外部完成,然后返回结果到查看页面

我正在创建一个供个人使用的网络抓取工具,它根据我的个人输入抓取汽车经销商网站,但我尝试从被重定向验证码页面阻止的几个网站收集数据。我正在用 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)

html php curl recaptcha web-scraping

1
推荐指数
1
解决办法
2425
查看次数

如何在 selenium 中处理延迟加载的图像?

在标记为重复之前,请考虑我已经浏览了许多相关的堆栈溢出帖子,以及网站和文章。我还没有找到解决方案。

这个问题是这个问题的后续,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 代码一起使用,那就太好了。任何帮助表示赞赏。

selenium lazy-loading webdriver web-scraping python-3.x

1
推荐指数
1
解决办法
1457
查看次数

无法使用请求从网页中收集某些值

我正在尝试从网页中的表格中获取一些动态值。此图像表示我希望从该页面获取的值。应该有任何方法可以使用请求来获取它们。为了让您知道,我在开发工具中查找了任何隐藏的 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)

如何使用请求从该表中获取值?

python beautifulsoup web-scraping python-requests

1
推荐指数
1
解决办法
260
查看次数

Scrapy:无法抓取 App Store 评论页面

大家好,我在从应用商店获取此页面的数据时遇到了一些问题: 应用商店评论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)

我想要的是从该页面的所有评论中检索所有可用的评分。

有人可以给我一个线索吗?

python app-store scrapy web-scraping ios

1
推荐指数
1
解决办法
1151
查看次数

在 Python3 中使用 Selenium 抓取动态表

我试图从这个页面上刮掉符号,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、...

selenium web-scraping python-3.x

1
推荐指数
1
解决办法
87
查看次数

抓取启用 JS 的站点以实现自动化

我正在尝试抓取一个特定站点 ( 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)

python ajax beautifulsoup web-scraping

1
推荐指数
1
解决办法
370
查看次数

动态抓取 JSON 值

我想从 JSON 响应中抓取一些数据。这是链接

我需要lessonTypes. 我想导出所有用逗号分隔的值。所以Theorieopleidingen有 4 个值Beroepsopleidingen有 8 个等等。

在此处输入图片说明

我想动态刮取,所以即使值的数量发生变化,它也总是用逗号分隔所有刮擦。

对不起,如果我的解释是周。

python json scrapy web-scraping

1
推荐指数
1
解决办法
80
查看次数