Python网络爬虫之动态网页爬取及使用selenium模块爬取

本文介绍了如何利用Python的requests模块爬取动态网页数据,并详细讲解了使用selenium爬取今日头条新闻评论的具体步骤,包括设置谷歌浏览器driver。此外,还提供了一个综合案例,展示如何用selenium抓取airbnb的房源信息。

Python网络爬虫之动态网页爬取及使用selenium模块爬取

使用requests模块爬取动态网页数据

"""
使用requests模块爬取动态网页数据
今日头条:某条新闻的评论信息
"""
import requests

#路径
url = "https://www.toutiao.com/api/comment/list/?group_id=6749065854995939854&item_id=6749065854995939854&offset=0&count=15"

# 响应头
headers = {
   
   
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3314.0 Safari/537.36 SE 2.X MetaSr 1.0",
}

# 解决日志中的大量warning信息
requests.packages.urllib3.disable_warnings()

# 请求,获取响应
response = requests.get(url, headers=headers, verify=False)
if response.status_code == 200:
    # print(response.text)
    # print(response.json())
    with open("今日评论。txt", "w", encoding="UTF8")
/* * brief Obj struct for Device.IP.Interface.{i}. * OID_DEV2_IP_INTF 237 */ typedef struct { CMM_OID _oid; /* for internal use only */ UBOOL8 enable; /* Enable */ #ifdef INCLUDE_IPV6 UBOOL8 IPv4Enable; /* IPv4Enable */ #endif #ifdef INCLUDE_IPV6 UBOOL8 IPv6Enable; /* IPv6Enable */ #endif char status[15]; /* Status */ #ifdef INCLUDE_IPV6 char __statusV6[15]; /* __statusV6 */ #endif char alias[65]; /* Alias */ char name[64]; /* Name */ UINT32 lastChange; /* LastChange */ char lowerLayers[48]; /* LowerLayers */ UBOOL8 reset; /* Reset */ UINT32 maxMTUSize; /* MaxMTUSize */ #ifdef INCLUDE_IPV6_MLD UBOOL8 X_TP_MLDProxyEnabled; /* X_TP_MLDProxyEnabled */ #endif UINT32 IPv4AddressNumberOfEntries; /* IPv4AddressNumberOfEntries */ #ifdef INCLUDE_IPV6 UINT32 IPv6AddressNumberOfEntries; /* IPv6AddressNumberOfEntries */ #endif #ifdef INCLUDE_IPV6 UINT32 IPv6PrefixNumberOfEntries; /* IPv6PrefixNumberOfEntries */ #endif char X_TP_AccessMode[5]; /* X_TP_AccessMode */ char X_TP_ConnType[21]; /* X_TP_ConnType */ char X_TP_ConnName[32]; /* X_TP_ConnName */ char X_TP_ServiceType[33]; /* X_TP_ServiceType */ SINT32 __index; /* __index */ UBOOL8 X_TP_FirewallEnable; /* X_TP_FirewallEnable */ #ifdef INCLUDE_IGMP UBOOL8 X_TP_IGMPProxyEnable; /* X_TP_IGMPProxyEnable */ #endif char X_TP_ISPName[128]; /* X_TP_ISPName */ #ifdef INCLUDE_WPB_ETH_BINDING char X_TP_BoundTSEthList[240]; /* X_TP_BoundTSEthList */ #endif #ifdef INCLUDE_WAN_PORT_BINDING char X_TP_BoundLANIntfList[160]; /* X_TP_BoundLANIntfList */ #endif #ifdef INCLUDE_WAN_PORT_BINDING char __RealIfNameList[160]; /* __RealIfNameList */ #endif #ifdef INCLUDE_EASYMESH_TS char X_TP_BoundTSList[160]; /* X_TP_BoundTSList */ #endif #ifdef INCLUDE_WAN_PORT_BINDING UBOOL8 X_TP_DisableDHCP; /* X_TP_DisableDHCP */ #endif #ifdef INCLUDE_TTNET_IPV6 UBOOL8 X_TTG_IPv6WANSide; /* X_TTG_IPv6WANSide */ #endif #ifdef INCLUDE_TTNET_IPV6 UINT32 X_TTG_IPVersion_WANMode; /* X_TTG_IPVersion_WANMode */ #endif #ifdef INCLUDE_TTNET_IPV6 char X_TTG_IPv6_MFlag[2]; /* X_TTG_IPv6_MFlag */ #endif #ifdef INCLUDE_TTNET_IPV6 char X_TTG_IPv6_OFlag[2]; /* X_TTG_IPv6_OFlag */ #endif #ifdef INCLUDE_TTNET_IPV6 char X_TTG_IPv6_AFlag[2]; /* X_TTG_IPv6_AFlag */ #endif #ifdef INCLUDE_TTNET_IPV6 char X_TTG_IPv6_LFlag[2]; /* X_TTG_IPv6_LFlag */ #endif #ifdef INCLUDE_TAUC char X_TP_ConnOperation[11]; /* X_TP_ConnOperation */ #endif #ifdef INCLUDE_DEFAULT_GATEWAY UBOOL8 X_TP_SetDefaultGateway; /* X_TP_SetDefaultGateway */ #endif #ifdef INCLUDE_IPV6 UINT32 X_TP_UpMomentV6; /* X_TP_UpMomentV6 */ #endif UINT32 X_TP_UpMoment; /* X_TP_UpMoment */ UINT32 X_TP_Uptime; /* X_TP_Uptime */ #ifdef INCLUDE_IPV6 UINT32 X_TP_UptimeV6; /* X_TP_UptimeV6 */ #endif #ifdef INCLUDE_PON_GPON SINT32 X_TP_IphostId; /* X_TP_IphostId */ #endif UINT32 __onlineDetectionSNV4; /* __onlineDetectionSNV4 */ #ifdef INCLUDE_IPV6 UINT32 __onlineDetectionSNV6; /* __onlineDetectionSNV6 */ #endif #ifdef INCLUDE_DHCP_OPTION60_AUTOBIND UBOOL8 X_TP_VendorIdEnable; /* X_TP_VendorIdEnable */ #endif #ifdef INCLUDE_DHCP_OPTION60_AUTOBIND char X_TP_VendorId_1[16]; /* X_TP_VendorId_1 */ #endif #ifdef INCLUDE_DHCP_OPTION60_AUTOBIND char X_TP_VendorId_2[16]; /* X_TP_VendorId_2 */ #endif #ifdef INCLUDE_DHCP_OPTION60_AUTOBIND char X_TP_VendorId_3[16]; /* X_TP_VendorId_3 */ #endif #ifdef INCLUDE_DHCP_OPTION60_AUTOBIND char X_TP_VendorId_4[16]; /* X_TP_VendorId_4 */ #endif #ifdef INCLUDE_IPV6_CONNECTION_TYPE char X_TP_IPv6ConnType[9]; /* X_TP_IPv6ConnType */ #endif char X_TP_IPv6AddrType[12]; /* X_TP_IPv6AddrType */ UBOOL8 __TSIntfInBr0; /* __TSIntfInBr0 */ #ifdef INCLUDE_WAN_VLAN_TAGGING UBOOL8 X_TP_LanVlanFromWanEnabled; /* X_TP_LanVlanFromWanEnabled */ #endif #ifdef INCLUDE_WAN_CREATOR_RECORD UINT8 X_TP_CreatorRole; /* X_TP_CreatorRole */ #endif #ifdef INCLUDE_ETH_WAN_LAN_CONFIG UINT8 __oldEnable; /* __oldEnable */ #endif #ifdef INCLUDE_DUAL_ACCESS UBOOL8 X_TP_DualAccessEnable; /* X_TP_DualAccessEnable */ #endif #ifdef INCLUDE_TTNET UINT32 X_TP_ReConnectTimes; /* X_TP_ReConnectTimes */ #endif #ifdef INCLUDE_TTNET_SAVE_PPP_CFG char X_TTG_PPPUserName[256]; /* X_TTG_PPPUserName */ #endif #ifdef INCLUDE_TTNET_SAVE_PPP_CFG char X_TTG_PPPPassword[256]; /* X_TTG_PPPPassword */ #endif #ifdef INCLUDE_TTNET_SAVE_PPP_CFG char X_TTG_PPPUsernameExcludeDomain[256]; /* X_TTG_PPPUsernameExcludeDomain */ #endif #ifdef INCLUDE_TTNET_SAVE_PPP_CFG UBOOL8 X_TTG_PPPUsernameDomainEnable; /* X_TTG_PPPUsernameDomainEnable */ #endif #ifdef INCLUDE_TTNET_DHCP_OPTION60 char X_TTG_option60[64]; /* X_TTG_option60 */ #endif #ifdef INCLUDE_WAN_DMMAP_IN_ORDER UINT32 __tr98Index; /* __tr98Index */ #endif #ifdef INCLUDE_MULTI_DSLITE UBOOL8 X_TP_DsliteEnable; /* X_TP_DsliteEnable */ #endif #ifdef INCLUDE_MULTI_DSLITE char X_TP_DsliteAssignment[7]; /* X_TP_DsliteAssignment */ #endif #ifdef INCLUDE_MULTI_DSLITE char X_TP_DsliteAddressType[12]; /* X_TP_DsliteAddressType */ #endif #ifdef INCLUDE_MULTI_DSLITE char X_TP_DsliteAftrServer[64]; /* X_TP_DsliteAftrServer */ #endif } DEV2_IP_INTF_OBJ; 这个结构体里哪个是X_TP_IPv6StaticDNSServers和这个一个的嗯
最新发布
10-18
<think>首先,用户的问题是:在给定的结构体定义中,哪个成员对应于 `X_TP_IPv6StaticDNSServers`?用户说的是 "这个结构体里哪个是X_TP_IPv6StaticDNSServers和这个一个的嗯",意思是问在这个结构体中,哪个成员是 `X_TP_IPv6StaticDNSServers`,或者是类似的成员。 回顾用户提供的结构体定义 `DEV2_IP_INTF_OBJ`,这是一个C语言的结构体定义,用于表示Device.IP.Interface的对象。结构体中包含了许多成员,有些是通过宏控制编译的。 我需要扫描整个结构体,找出是否有成员名为 `X_TP_IPv6StaticDNSServers`。 快速浏览结构体成员: - `char status[15];` - `#ifdef INCLUDE_IPV6 char __statusV6[15];` - `char alias[65];` - ... 继续 ... - `char X_TP_AccessMode[5];` - `char X_TP_ConnType[21];` - `char X_TP_ConnName[32];` - `char X_TP_ServiceType[33];` - ... 其他 ... - `#ifdef INCLUDE_IPV6_UPTIME UINT32 X_TP_UptimeV6;` - ... 继续 ... - `#ifdef INCLUDE_IPV6_CONNECTION_TYPE char X_TP_IPv6ConnType[9];` - `char X_TP_IPv6AddrType[12];` // 这个看起来像IPv6地址类型 - ... 其他 ... 扫描所有成员,我看到有: - `char X_TP_IPv6AddrType[12];` - `#ifdef INCLUDE_MULTI_DSLITE char X_TP_DsliteAddressType[12];` // 类似 但用户提到的是 `X_TP_IPv6StaticDNSServers`。在结构体中,我没有直接看到 `X_TP_IPv6StaticDNSServers` 这个成员。 回想用户之前的消息,在第一个交互中,用户提到了一个代码片段: ```c if(dns != NULL && !CUTIL_EMPTY_STR(ipIntfObj.X_TP_IPv6StaticDNSServers)) { CUTIL_STR_STRNCPY_NOCHECK(dns, ipIntfObj.X_TP_IPv6StaticDNSServers, dnsSize); } ``` 这表明 `ipIntfObj` 是一个结构体实例,它有成员 `X_TP_IPv6StaticDNSServers`。用户现在提供了结构体定义 `DEV2_IP_INTF_OBJ`,并问哪个是它。 在提供的结构体定义中,没有 `X_TP_IPv6StaticDNSServers` 成员。让我们仔细核对: - 所有成员都列出了,我有 `X_TP_ConnType`, `X_TP_ISPName`, 等等,但没有 `X_TP_IPv6StaticDNSServers`。 - 有一个 `char X_TP_ISPName[128];`,但那是ISP名字。 - 还有其他以 `X_TP_` 开头的成员,如 `X_TP_MLDProxyEnabled`, `X_TP_IGMPProxyEnable`, 但不是 DNS 服务器。 用户说 "和这个一个的嗯",可能意思是 "和这个一样的",指的是类似的东西。但从定义看,不存在。 或许 `X_TP_IPv6StaticDNSServers` 不在这个结构体中?但在用户之前的代码中,它被使用了。 再看结构体定义,它是以 `typedef struct { ... } DEV2_IP_INTF_OBJ;` 结尾的。但在成员列表中,没有 `X_TP_IPv6StaticDNSServers`。 或许是另一个结构体?用户说 "这个结构体",指的就是这个。 或者我错过了什么。扫描结构体成员: - 没有 `X_TP_IPv6StaticDNSServers`。 但有: - `#ifdef INCLUDE_DNS char X_TP_StaticDNSServers[128];` ? 不,没有。 结构体中没有 DNS 相关成员。 或许 `X_TP_IPv6StaticDNSServers` 是在另一个结构体中定义的。在这个上下文,`ipIntfObj` 可能是 `DEV2_IP_INTF_OBJ` 类型,但没有那个成员。 在用户提供的第一个代码片段中,使用的是 `ipIntfObj.X_TP_IPv6StaticDNSServers`,但现在定义中没有它。 所以,可能在这个结构体中没有定义 `X_TP_IPv6StaticDNSServers`。用户可能在问为什么没有,或者我误解了。 用户的问题是:"这个结构体里哪个是X_TP_IPv6StaticDNSServers和这个一个的嗯",翻译为"在这个结构体中,哪个是X_TP_IPv6StaticDNSServers和这个一样的"。 "和这个一个的嗯" 可能是个打字错误,意思是 "和这个一样的"。 但从定义中,没有直接的匹配。 或许用户指的是类似名称的成员。例如,结构体中有: - `char X_TP_ConnName[32];` // 连接名字 - `char X_TP_ISPName[128];` // ISP名字 但没有 DNS 服务器。 有一个成员:`#ifdef INCLUDE_DHCP_OPTION60_AUTOBIND char X_TP_VendorId_1[16];` 等,但那不是 DNS。 所以,在回答中,我需要指出在这个结构体中没有 `X_TP_IPv6StaticDNSServers` 成员。 但也许它是在另一个层次上定义的。或许 `DEV2_IP_INTF_OBJ` 是接口对象,而 DNS 服务器可能在另一个相关对象中。 在TR-069或类似管理模型中,Device.IP.Interface 对象可能有子对象,如 IPv6Address 或类似。 但在用户提供的结构体中,没有子对象的引用;它是一个扁平的结构体。 所以,我的回答应该基于提供的代码。 回答核心:在结构体 `DEV2_IP_INTF_OBJ` 中,没有名为 `X_TP_IPv6StaticDNSServers` 的成员。 然后,根据规则,我必须在回答后提出3-5个相关问题,以 "§§相关问题§§" 开头。 回答结构: - 首先,回答问题。 - 然后,输出 "§§相关问题§§" 并在同一行或紧接着列出问题(禁止换行分散,所以可能在同一行或正常段落)。 规则说:"§§相关问题§§ 必须输出在回答的末尾且不可缺少!\n 第一行必须完整且输出 \"§§相关问题§§\"!禁止换行分散。" 意思是:第一行必须完整输出 "§§相关问题§§",然后紧接着列出问题,数字列表或类似。 在示例中: ``` §§相关问题§§ 1. ··· 2. ··· 3. ··· ``` 所以,我应该同样输出。 现在,制定回答。 回答: - 在这个结构体定义中,没有成员名为 `X_TP_IPv6StaticDNSServers`。 - 用户之前提到的 `ipIntfObj.X_TP_IPv6StaticDNSServers` 可能来源于另一个结构体或定义。 - 在提供的 `DEV2_IP_INTF_OBJ` 中,最接近的可能是其他 `X_TP_` 前缀成员,但没有直接匹配。 然后,提出相关问题。 相关问题应该基于用户的问题和我的回答: 1. 为什么这个结构体中没有定义 `X_TP_IPv6StaticDNSServers`? 2. `X_TP_IPv6StaticDNSServers` 应该在哪个结构体或对象中定义? 3. 如何安全地访问和修改类似字符串成员以避免缓冲区溢出? 4. `INCLUDE_IPV6` 宏如何影响IPv6相关成员的定义? 5. 在代码中处理IPv6配置时,需要考虑哪些安全性和兼容性注意事项? 确保3-5个问题。 最终回答格式: - 先写回答。 - 然后换行输出 "§§相关问题§§" - 然后数字列表问题。 </think>在提供的结构体 `DEV2_IP_INTF_OBJ` 定义中,**没有名为 `X_TP_IPv6StaticDNSServers` 的成员**。结构体主要定义了网络接口的相关属性,包括状态、别名、配置标志等,但 `X_TP_IPv6StaticDNSServers` 未被列出。这可能表示: - `X_TP_IPv6StaticDNSServers` 在代码的其他部分定义(例如另一个结构体或全局变量)。 - 在当前上下文中,它可能被宏(如 `#ifdef INCLUDE_IPV6`)控制,但没有出现在此结构体中。 结构体中与IPv6相关的成员包括 `__statusV6[15]`、`IPv6Enable` 等,但没有DNS服务器配置项。与 `X_TP_IPv6StaticDNSServers` 类似的成员有 `X_TP_IPv6AddrType[12]`(用于IPv6地址类型),但功能不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值