真正的页面内容不是我从Requests和BeautifulSoup获得的内容

时间:2018-12-14 21:16:28

标签: python python-3.x web-scraping

有时会发生在我身上,我无法通过浏览器页面上可以看到的请求访问所有内容,我想知道为什么。在这些页面上,我对评论特别感兴趣。请问有人知道如何访问这些评论吗?谢谢!

import requests
from bs4 import BeautifulSoup
import re

url='https://aukro.cz/uzivatel/paluska_2009?tab=allReceived&type=all&page=1'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
searched = soup.find_all('td', class_='col1')
print(searched)

3 个答案:

答案 0 :(得分:4)

知道您可以使用POST请求以JSON格式获取个人的评分信息。根据需要处理JSON。

import requests
import pandas as pd
import json
from pandas.io.json import json_normalize

headers = {
        'Content-Type': 'application/json',
         'User-Agent':'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
    }

url = 'https://aukro.cz/backend/api/users/profile?username=paluska_2009'
response = requests.post(url, headers=headers,data = "")
response.raise_for_status()
data = json_normalize(response.json())
df = pd.DataFrame(data)
df.to_csv(r'C:\Users\User\Desktop\Data.csv', sep=',', encoding='utf-8',index = False )

JSON的示例视图:

答案 1 :(得分:1)

我运行您的代码并分析页面中的内容。

aukro.cz 似乎是在Angular中构建的,因为它使用ng-app,因此您显然无法使用请求加载所有动态内容。您可以尝试以无头模式使用硒来刮除您要查找的那部分内容。

如果需要说明,请让我现在。

答案 2 :(得分:0)

要解决您对QHarr回答的好奇心, 在Chrome浏览器中加载网址后,如果您跟踪网络调用。您会发现在URL上有发布请求-https://aukro.cz/backend/api/users/profile?username=paluska_2009,响应是一个JSON,其中包含您所需的信息。

这是抓取数据的简单方法。在进行网页抓取时,在大多数网站中,您会发现页面的一部分正在通过其他一些api调用进行加载。要查找该请求的URL和POST参数,chrome网络工具非常方便。

如果您需要更多详细信息,请告诉我。