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 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应
  • ¥15 matlab基于pde算法图像修复,为什么只能对示例图像有效
  • ¥100 连续两帧图像高速减法
  • ¥15 组策略中的计算机配置策略无法下发
  • ¥15 如何绘制动力学系统的相图
  • ¥15 对接wps接口实现获取元数据
  • ¥20 给自己本科IT专业毕业的妹m找个实习工作
  • ¥15 用友U8:向一个无法连接的网络尝试了一个套接字操作,如何解决?
  • ¥30 我的代码按理说完成了模型的搭建、训练、验证测试等工作(标签-网络|关键词-变化检测)