如何在for循环中使用requests_html获取条目的绝对链接URL
requests_html抓取条目URL并存入DataFrame的实现方法
完全可以实现该需求,你在抓取到条目的Element对象后,直接提取对应<a>标签的href属性即可,无需引入额外工具。
操作步骤
- 定位条目时先拿到完整的Element对象,不要直接提取文本。若你当前定位的是条目外层容器,可在容器内二次查找对应的
<a>标签元素。 - 标题通过Element对象的
text属性获取,URL通过Element对象的attrs['href']属性获取。如果获取到的是相对路径,可调用r.html.urljoin()方法转为绝对路径。 - 将所有条目的标题、URL整理为字典列表后,直接传入pandas即可生成DataFrame。
示例代码
import pandas as pd from requests_html import HTMLSession # 初始化会话、请求页面 session = HTMLSession() r = session.get("替换为你要爬取的页面地址") # 定位所有条目(选择器替换为你实际使用的定位规则) # 如果条目外层是div,就写对应div的选择器,后续循环内再找a标签 item_list = r.html.find("a.item") result = [] for item in item_list: # 提取标题 title = item.text.strip() # 提取链接,用get方法避免个别无href的条目报错 url = item.attrs.get("href", "") # 相对路径转绝对路径,不需要可以注释掉 url = r.html.urljoin(url) result.append({ "标题": title, "链接": url }) # 转为DataFrame df = pd.DataFrame(result) # 可按需执行df.to_csv("result.csv", index=False)保存到本地
注意事项
- 如果你当前定位的是条目的外层非a标签元素,可在循环内通过
a_tag = item.find("a", first=True)先拿到子元素的a标签,再从a_tag提取href属性即可。 - 若抓取的是动态渲染的页面,调用
r.html.render()方法加载渲染后的页面内容后再执行定位提取即可。
内容的提问来源于stack exchange,提问作者lanavargas2002
相关产品推荐
相关产品推荐

