有pandas想求助大佬?

阅读 2k
2 个回答

你可以用Python 的 requests 和 lxml 库实现这个方案,我给你一段我学习时候看过的前人的代码(声明一下,这段代码大概是一年前在另外一个博客网站找pdf转word资料时候找到的,由于忘记链接了,所以备注形式表达对原创者的敬意)

import requests
from lxml import etree

url = 'https://gaokao.chsi.com.cn/zsgs/zhangcheng/listVerifedZszc--i...,method-view,schId-1940.dhtml'
response = requests.get(url)
html = response.content.decode('utf-8')
tree = etree.HTML(html)

# 使用 XPath 获取目标元素
content = tree.xpath('//div[@class="content zszc-content UEditor"]')[0]

# 将内容写入文件
with open('content.docx', 'w', encoding='utf-8') as f:
    f.write(etree.tostring(content, method='html', encoding='unicode'))

这段代码逻辑简单清晰,相信你也能了解的,当然如果网站本身有反爬机制,就得考虑其他办法了。
——————————————————————————————————————————————————————————————————
下划线:抱歉我误解了楼主的需求,对于获取 div 标签下所有子节点并将其写入 word 文档,可以如下方法操作
头文件中加一个
from docx import Document

然后写(这部分的目的是用前文回答中的XPath 获取整个内容所在 div 元素)

root = lxml.html.fromstring(html_content)
content_div = root.xpath('//div[@class="content zszc-content UEditor"]')[0]
nodes = content_div.xpath('node()')

最后是这部分的关键,目的是新建文档,遍历div元素读取到文档中,进行文本符号格式转换清洗整理数据,然后完成保存操作。我们命名保存文件为output。

doc = Document()
for node in nodes:
    if isinstance(node, lxml.etree._Element):
        element_html = lxml.html.tostring(node, pretty_print=True, encoding='unicode')
        element_html = element_html.strip()
        paragraph = doc.add_paragraph(element_html)
    else:
        paragraph = doc.add_paragraph(node)
doc.save('output.docx')

用BeautifulSoup4会更轻松点,不需要用到xpath
pip install BeautifulSoup

from bs4 import BeautifulSoup
...
...
html = resp.content
soup = BeautifulSoup(html)
target = soup.find('div', attrs={'class': 'content zszc-content UEditor'})
print(target.text)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题