我想从带有动态表的网页中抓取数据。该表包含有关乘坐火车的信息。
这是网站:https : //www.laerm-monitoring.de/zug/?mp=3/
我试图通过一个简单的挂载请求会话来请求数据,但我只得到了基本的 HTML 数据,而没有表格中的数据。
def requests_retry_session(
retries=3,
backoff_factor=0.3,
status_forcelist=(500, 502, 504, 429),
session=None,
):
session = session or requests.Session()
retry = Retry(
total=retries,
read=retries,
connect=retries,
backoff_factor=backoff_factor,
status_forcelist=status_forcelist,
)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
return session
session = requests_retry_session()
response = session.get('https://www.laerm-monitoring.de/zug/?mp=3/')
response.content
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地做到这一点?
我有一个 C++ 项目,clang-tidy建议在[[nodiscard]]任何地方添加。这是一个好习惯吗?我的理解是,[[nodiscard]]只有在忽略返回值对程序可能是致命的时才应该使用。我有一个对象Car,它有一个成员const unsigned int m_ID。吸气剂应该unsigned int getID()有[[nodiscard]]吗?clang-tidy 建议如此。
编辑:
当然,我不想忽略吸气剂。但
我的观点是,如果每个返回内容的函数都应该有一个[[nodiscard]],那么该属性[[nodiscard]]无论如何都是多余的。编译器可以简单地检查所有返回内容的函数。
当我vector在函数中使用如下时,我得到一个变量 D 并且它可以工作。
vector<int> D(100);
Run Code Online (Sandbox Code Playgroud)
但是,当我决定将其用作类成员时,出现以下奇怪的错误:
error: expected identifier before numeric constant
99 | vector<int> D(100);
| ^~~
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么会出现这个特定错误吗?我可以在类中使用数组作为int D[100].
我正在使用https://cppinsights.io/。以下是代码(默认示例)
#include <cstdio>
int main()
{
const char arr[10]{2,4,6,8};
for(const char& c : arr)
{
printf("c=%c\n", c);
}
}
Run Code Online (Sandbox Code Playgroud)
关于cppinsights
C++ Insights 是一个基于 clang 的工具,可以进行源到源的转换。它的目标是让事情可见,这通常是有意地在幕后发生。这是关于编译器为我们做的事情的魔法。或者查看编译器的类。
这是生成的代码,这是编译器如何看待代码
#include <cstdio>
int main()
{
const char arr[10] = {2, 4, 6, 8, '\0', '\0', '\0', '\0', '\0', '\0'};
{
char const (&__range1)[10] = arr;
const char * __begin1 = __range1;
const char * __end1 = __range1 + 10L;
for(; __begin1 != __end1; ++__begin1) {
const char & c = *__begin1;
printf("c=%c\n", …Run Code Online (Sandbox Code Playgroud) 我有一个带有成员 std::map<int,int> 的类 X m_lookupTable。我应该使用以下哪项:
Class X {
...
private:
std::map<int,int> m_lookupTable;
...
}
Run Code Online (Sandbox Code Playgroud)
或在类的析构函数中使用new和分配delete
class X{
private:
std::map<int,int>* m_lookupTable;
X() {
m_lookupTable = new std::map<int,int>();
}
~X(){
delete m_lookupTable;
}
}
Run Code Online (Sandbox Code Playgroud)
什么应该是首选方式,为什么?