Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能刮去一些不能被beautifulsoup获得的分区?_Python_Html_Web Scraping_Beautifulsoup_Webpage - Fatal编程技术网

Python 我怎样才能刮去一些不能被beautifulsoup获得的分区?

Python 我怎样才能刮去一些不能被beautifulsoup获得的分区?,python,html,web-scraping,beautifulsoup,webpage,Python,Html,Web Scraping,Beautifulsoup,Webpage,我想从你的网站上获取公司信息 与数据相关的Div部分是Div class=“col-xs-12 col-md-6 col-lg-6,但当运行以下代码提取所有类时,该类不可用 import requests from bs4 import BeautifulSoup page = requests.get("http://gyeonquartz.com/distributors-detailers/") soup = BeautifulSoup(page.content, 'html.parse

我想从你的网站上获取公司信息

与数据相关的Div部分是
Div class=“col-xs-12 col-md-6 col-lg-6
,但当运行以下代码提取所有类时,该类不可用

import requests
from bs4 import BeautifulSoup

page = requests.get("http://gyeonquartz.com/distributors-detailers/")
soup = BeautifulSoup(page.content, 'html.parser')

print(soup.prettify())

当我们检查网络源时,所有经销商的详细信息都在
div class=“col-xs-12 col-md-6 col-lg-6”下给出“
但是在解析过程中,没有这样的div。

如果查看页面源代码,您会发现您要查找的div标记都不存在于页面的源代码中。因为请求只发出初始请求,不加载javascript所做的任何动态内容,所以您要查找的标记不包含在返回的html中

要获取动态内容,您需要这样做,否则问题不在于解析器,而在于内容


的解决方案非常类似,通过ajax请求加载页面后,将填充要废弃的数据。当您通过python请求库发出请求时,只会收到html页面

你有两个选择

  • 使用(或其他选项,如)呈现javascript加载的内容

  • 直接发出ajax请求并获得json响应。您可以通过使用浏览器中“检查”工具上的“网络”选项卡来查找此信息

  • 本例中的第二个选项如下所示

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    page = requests.get("http://gyeonquartz.com/wp-admin/admin-ajax.php?action=gyeon_load_partners")
    print(page.json())
    
    这将输出非常长的json。我已将其转换为数据帧以更好地查看它

    import requests
    from bs4 import BeautifulSoup
    import pandas as pd
    page = requests.get("http://gyeonquartz.com/wp-admin/admin-ajax.php?action=gyeon_load_partners")
    df=pd.DataFrame.from_dict(page.json())
    df['address'] = [BeautifulSoup(text,'html.parser').get_text().replace("\r\n","") for text in df['address'] ]
    print(df) #just use df if in jupyter notebook
    
    我的jupyter笔记本的输出示例如下。

    非常感谢,它成功了。但我还有一些需要澄清的问题:1)如何找到ajax文件的名称及其地址?您让我在网络上检查XHR(在开发人员模式下),但我看不到它,我指的是如何找到page=requests.get(“)的地址