从api接收数据。python,请求

从api接收数据。python,请求,python,web-scraping,python-requests,Python,Web Scraping,Python Requests,我想从URL1= 发现此网站的API URL2= 如何向URL1发出请求并从URL2接收数据 代码 import requests url1 = "https://www.wildberries.ru/catalog/0/search.aspx?search=%D0%BC%D0%B0%D0%BA%D0%BE%D1%80%D0%BE%D0%BD%D1%8B&sort=popular" response = requests.get(url1) response.enc

我想从URL1=

发现此网站的API URL2=

如何向URL1发出请求并从URL2接收数据

代码

import requests

url1 = "https://www.wildberries.ru/catalog/0/search.aspx?search=%D0%BC%D0%B0%D0%BA%D0%BE%D1%80%D0%BE%D0%BD%D1%8B&sort=popular"
response = requests.get(url1)
response.encoding = 'utf-8'
print(response.text)

通常,如果有这样的结构化数据API,请使用该url获取所需的数据。有时,您可能需要通过添加头、cookie和参数来重新设计HTTP请求。这个很简单,你不需要这些

json()方法将为您提供一个字典。因此,您必须浏览字典才能获得所需的数据。你还没有告诉我们这是什么数据,所以这是我能给你的最大帮助

代码示例 示例输出 使用Selenium的代码示例 解释 Selenium通过webdriver模块工作,该模块允许您自动化浏览器测试。这是一个主要用于测试的框架,不一定用于webscraping,但web scraper社区已经使用它,因为它是处理大量使用javascript的网站的少数几种方法之一

Selenium为特定浏览器提供驱动程序。浏览器驱动程序通过安全连接与相应浏览器交互。这些浏览器驱动程序特定于用于自动化的语言

因此,当您想要模拟浏览器活动时,将执行以下任务

  • 生成HTTP请求并将其传递给浏览器驱动程序
  • 此请求由驱动程序通过HTTP服务器接收
  • 在浏览器上执行的所有步骤都由HTTP服务器决定
  • 这是一篇关于概述的比较好的文章

    因此,我们导入webdriver模块,这允许我们进行浏览器活动。我们必须有chromedriver,这是我们如何进行浏览器活动的。你可以从我这里得到它

    我们必须规定chromedriver在我们的驱动器上的位置。我在这里做过。我们正在使用chrome,并通过
    可执行文件路径
    关键字参数进行指定

    我们使用get方法并指定希望浏览器加载的url

    现在浏览器已经加载了页面,我们可以访问所有页面。我们通过find_elements_by方法来实现这一点。有很多不同的选择。这里我们选择了
    find\u elements\u by\u xpath()
    方法。我们指定一个XPATH选择器,它允许我们提取所需的数据。注意find_elements_by_xpath使用xpath选择器获取所有元素并将它们放入列表中。如果只有一个元素,请使用
    find\u element\u by\u xpath()
    方法

    因为card变量是一个列表,所以我们可以执行for循环来进一步从网站的该部分提取数据。在这种情况下,我们选择了网站上的每一张“卡片”,其中包含关于每一种食物的信息。如果你愿意,你可以用网站的HTML来检查这个类。通过使用
    find_elements\u By_xpath
    我们选择了网站上所有的食物“卡片”。然后,我们可以使用
    find\u element\u by\u xpath
    ,进一步提取这些div中的信息

    XPATH选择器的基础知识

    • /
      :搜索整个网站
    • div
      :搜索div标记
    • [@class=”“]
      :指定前面标记的类
    硒:

    • .text
      :这将获取该html标记的文本
    因此,代码行
    驱动程序。通过xpath('//div[@class=“dtList i-dtList j-card-item”]”查找元素。

    搜索整个HTML文档,查找带有类“tList i-dtList j-card-item”的div并将其选中。这样我们就可以从该div中的所有html标记中提取数据

    然后在列表上执行for循环。使用find_element_by_xpath,我们只查找一个元素。
    /
    在父div中搜索。因此,在这里我们使用类搜索span。
    .text
    选择该标记的文本

    我们使用了一个try-except块,没有任何uchelementexception。当有一些商品的价格不符合NoTouchElement异常时,我们可以使用该异常,然后输入选择的字符串


    没有更多的信息,这只是硒的入门。我建议您试一试,使用selenium文档让您的头脑清醒起来。

    谢谢,但我需要提取URL2。一开始,我只知道URL1如何操作?您需要使用selenium软件包来自动执行浏览器活动。此页面上的所有数据都是通过javascript实现的。如果在浏览器中关闭javascript,您将看不到任何有用的内容(如果您不确定,可以尝试此网站和其他网站)。一般来说,如果是这样的话,有两种选择。混响工程HTTP请求,这就是我的答案,或者你必须模拟浏览器活动。模拟浏览器活动的一个可能原因是它很脆弱,而且通常速度很慢。您还没有扩展实际需要的数据。。。我能帮你的只有这么多。我已经提供了一个使用selenium的编码示例,但是如果你从未使用过selenium,那么你需要阅读一些东西!我会尽力解释的。
    import requests
    html = requests.get('https://nm-2-card.wildberries.ru/enrichment/v1/api?spp=0&regions=69,63,66,31,48,22,30,4,1,68,70,64,40,38,71,33,65&stores=116433,115577,117501,507,3158,2737,1699,1733,686,117986,6158,117673,119261,117413&couponsGeo=3,12,15,18&pricemarginCoeff=1.0&reg=0&appType=1&offlineBonus=0&onlineBonus=0&emp=0&nm=7403217;7403219;7777517;7777518;9132344;9132356;9132362;9254700;9254707;9254711;9361310;9361312;9642551;9929901;10129965;10140147;10140149;10140156;10210357;10555010;10557917;10557928;10557931;10848573;10848575;10848583;11190841;11477541;11550153;11632388;11665068;11712962;11712963;11712964;11712965;11712966;11734372;11734374;11764432;11989953;12060487;12200001;12200004;12200005;12206097;12237827;12242309;12383696;12383697;12383702;12383711;12554112;12554119;12554124;12554127;12554128;12554129;12554130;12554164;12554166;12554167;12609241;12620265;13238159;13238160')
    data = html.json()
    
    {'state': 0,
     'data': {'products': [{'id': 7403217,
        'root': 5797737,
        'kindId': 0,
        'subjectId': 3111,
        'name': 'Макароны звездочки',
        'brand': 'Гурмайор',
        'brandId': 27327,
        'siteBrandId': 37327,
        'price': 542,
        'sale': 34,
        'salePrice': 355,
        'extended': {'basicSale': 20,
         'basicPrice': 433,
         'promoSale': 18,
         'promoPrice': 355},
        'picsCount': 1,
        'rating': 3,
        'feedbackCount': 6,
        'isAdult': False,
        'isDigital': False,
        'icons': {'isNew': False},
        'colors': [],
        'sizes': [{'name': '',
          'origName': '0',
          'rank': 0,
          'optionId': 25559509,
          'stocks': [{'wh': 507, 'qty': 103}]}],
        'diffPrice': False},
    
    import requests
    from selenium import webdriver
    from selenium.common.exceptions import NoSuchElementException
    
    driver = webdriver.Chrome(executable_path=r'c:\users\aaron\chromedriver.exe')
    url ='https://www.wildberries.ru/catalog/0/search.aspx?search=%D0%BC%D0%B0%D0%BA%D0%BE%D1%80%D0%BE%D0%BD%D1%8B&sort=popular'
    driver.get(url)
    card = driver.find_elements_by_xpath('//div[@class="dtList i-dtList j-card-item "]')
    
    for a in card: 
         food = a.find_element_by_xpath('.//span[@class="goods-name c-text-sm"]').text
         try:
            lower_price = a.find_element_by_xpath('.//ins[@class="lower-price"]').text
         except NoSuchElementException:
            lower_price = 'No reduction'
         try: 
            full_price = a.find_element_by_xpath('.//span[@class="price-old-block"]/del').text
        
         except NoSuchElementException:
            full_price = 'No price'