hanziqing 2022-01-07 15:25 采纳率: 100%
浏览 61
已结题

python爬取论坛文章问题

需求是:把页面上的内容保存到word中,页面上有文字和图片。现在只实现了文字和图片分开保存,文字在前,图片在后,希望能实现按照页面上的顺序,文字和图片穿插保存。
我想在读取到内容后判断一下是文字还是图片,然后分别执行不同的代码进行保存,尝试了很久也没找到方法。希望能实现按照页面上的顺序保存到本地word中。

import requests
from bs4 import BeautifulSoup
from docx import Document
from docx.shared import Inches,Pt,RGBColor
from docx.oxml.ns import qn

headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"}

file = Document()
file.styles['Normal'].font.name = u'宋体'
file.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
file.styles['Normal'].font.size = Pt(12)
file.styles['Normal'].font.color.rgb = RGBColor(0,0,0)
url = 'https://bbs.tiexue.net/post_7023745_1.html'
title = '标题'

strhtml = requests.get(url,headers=headers,timeout=(4,3))
soup = BeautifulSoup(strhtml.text,'html.parser')
data = soup.select('#postContent > p[class="bbsp"]')
pic = soup.select('#postContent > p[class="bbsp"] > a > img')
file.add_paragraph(url)
file.add_paragraph(title)
for item1 in data:
    result1 = {
        'paragraph':item1.get_text()
    }
    file.add_paragraph(result1['paragraph'])

for item2 in pic:
    result2 = {
        'pic':item2.get('src')
    }
    pic = requests.get(result2['pic'],headers=headers,timeout=(4,3))
    with open('pic_tmp.png',"wb")as f:
        f.write(pic.content)
    file.add_picture('pic_tmp.png', width=Inches(6))

docxurl = title+'.docx'
file.save(docxurl)
  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-01-07 16:17
    关注

    data中已经包含图片信息,遍历的时候判断是图片直接加图片,否则就文字就可以了,代码如下

    img

    import requests
    from bs4 import BeautifulSoup
    from docx import Document
    from docx.shared import Inches,Pt,RGBColor
    from docx.oxml.ns import qn
    headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"}
    file = Document()
    file.styles['Normal'].font.name = u'宋体'
    file.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'宋体')
    file.styles['Normal'].font.size = Pt(12)
    file.styles['Normal'].font.color.rgb = RGBColor(0,0,0)
    url = 'https://bbs.tiexue.net/post_7023745_1.html'
    title = '标题'
    strhtml = requests.get(url,headers=headers,timeout=(4,3))
    soup = BeautifulSoup(strhtml.text,'html.parser')
    data = soup.select('#postContent > p[class="bbsp"]')
    #pic = soup.select('#postContent > p[class="bbsp"] > a > img')###不需要
    file.add_paragraph(url)
    file.add_paragraph(title)
    for item1 in data:
        if str(item1).find('<img')!=-1:################图片
            item2=item1.select('img')[0]
          
            result2 = {
                'pic':item2.get('src')
            }
            pic = requests.get(result2['pic'],headers=headers,timeout=(4,3))
            with open('pic_tmp.png',"wb")as f:
                f.write(pic.content)
            file.add_picture('pic_tmp.png', width=Inches(6))
        else:################文字
            result1 = {
                'paragraph':item1.get_text()
            }
            file.add_paragraph(result1['paragraph'])
    docxurl = title+'.docx'
    file.save(docxurl)
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月15日
  • 已采纳回答 1月7日
  • 修改了问题 1月7日
  • 创建了问题 1月7日

悬赏问题

  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题