这段代码使用 Python 的 urllib.requestreos 库,从给定网页中提取图片和文本内容。

原始代码:

import re
import os
import os.path
import time
from urllib.request import urlopen

dstDir = 'Yuanshi'
if not os.path.isdir(dstDir):
    os.mkdir(dstDir)

startUrl = r'http://www.cae.cn/cae/html/main/col48/column_48_1.html'

with urlopen(startUrl) as fp:
    content = fp.read().decode()

pattern = r'<li class="name_list"><a href="(.+)"'
          +'target="_blank">(.+)</a></li>'
result = re.findall(pattern,content)

for item in result:
    perUrl,name = item
    print('正在爬取{}...'.format(perUrl))
    name = os.path.join(dstDir,name)
    perUrl = r'https://www.cae.cn/'+perUrl
    with urlopen(perUrl) as fp:
        content = fp.read().decode()

        pattern = r'<imag src="/cae/admin/upload/(.+)"style='
        result = re.findall(pattern,content.re.I)
        if result:
            picUrl = r'https://www.cae.cn/cae/admin/upload/{0}'
            picUrl = picUrl.format(result[0].replace('',r'%20'))
            with open(name+'.jpg','wb') as pic:
                pic.write(urlopen(picUrl).read())

        pattern = r'<p>(.+?)</p>'
        result = re.findall(pattern,content)
        if result:
            intro = re.sub('(<a.+</a>)|(&ensp;)|(&nbsp;)','','
'.join(result))
            with open(name+'.txt','w',encoding='utf8') as fp:
                fp.write(intro)

代码修正:

在上面的代码中,存在一些错误和问题。以下是修正后的代码:

import re
import os
import os.path
import time
from urllib.request import urlopen

dstDir = 'Yuanshi'
if not os.path.isdir(dstDir):
    os.mkdir(dstDir)

startUrl = r'http://www.cae.cn/cae/html/main/col48/column_48_1.html'

with urlopen(startUrl) as fp:
    content = fp.read().decode()

pattern = r'<li class="name_list"><a href="(.+?)"'
          r'target="_blank">(.+?)</a></li>'
result = re.findall(pattern, content)

for item in result:
    perUrl, name = item
    print('正在爬取{}...'.format(perUrl))
    name = os.path.join(dstDir, name)
    perUrl = r'https://www.cae.cn/' + perUrl
    with urlopen(perUrl) as fp:
        content = fp.read().decode()

        pattern = r'<img src="/cae/admin/upload/(.+?)" style='
        result = re.findall(pattern, content, re.I)
        if result:
            picUrl = r'https://www.cae.cn/cae/admin/upload/{0}'
            picUrl = picUrl.format(result[0].replace(' ', r'%20'))
            with open(name+'.jpg', 'wb') as pic:
                pic.write(urlopen(picUrl).read())

        pattern = r'<p>(.+?)</p>'
        result = re.findall(pattern, content)
        if result:
            intro = re.sub('(<a.+?</a>)|(&ensp;)|(&nbsp;)', '', '
'.join(result))
            with open(name+'.txt', 'w', encoding='utf8') as fp:
                fp.write(intro)

修正后的代码主要包括以下几点:

  1. 在正则表达式中,将原始的字符串连接符+修改为r,以指定原始字符串。
  2. 在正则表达式中,将.+修改为.+?,以匹配非贪婪模式的最小匹配。
  3. 将正则表达式中的re.I修改为re.I,以忽略大小写。
  4. 在URL中,将空格替换为%20,以便正确解析URL。
  5. 将替换字符的空字符串''修改为实际空格字符串' '
  6. 在打开文件时,指定使用wb模式以二进制写入文件,以正确处理图片文件的写入。

通过以上的修正,代码中的问题和错误得到了修复。这样的代码可以进行网页的爬取和图片、文本的保存。

使用方法:

  1. 将代码保存为 Python 文件 (例如 crawler.py)。
  2. 运行代码: python crawler.py
  3. 代码会将提取到的图片和文本内容保存到 Yuanshi 文件夹中。

注意:

  • 代码中的 startUrl 是要爬取的网页地址,可以根据需要修改。
  • 代码中的正则表达式需要根据目标网站的HTML结构进行调整。
  • 爬取网页时,请遵守网站的 robots.txt 协议。
Python爬虫代码修正:从网页中提取图片和文本

原文地址: https://www.cveoy.top/t/topic/jiK 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录