Python爬虫代码修正:从网页中提取图片和文本
这段代码使用 Python 的 urllib.request、re 和 os 库,从给定网页中提取图片和文本内容。
原始代码:
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>)|( )|( )','','
'.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>)|( )|( )', '', '
'.join(result))
with open(name+'.txt', 'w', encoding='utf8') as fp:
fp.write(intro)
修正后的代码主要包括以下几点:
- 在正则表达式中,将原始的字符串连接符
+修改为r,以指定原始字符串。 - 在正则表达式中,将
.+修改为.+?,以匹配非贪婪模式的最小匹配。 - 将正则表达式中的
re.I修改为re.I,以忽略大小写。 - 在URL中,将空格替换为
%20,以便正确解析URL。 - 将替换字符的空字符串
''修改为实际空格字符串' '。 - 在打开文件时,指定使用
wb模式以二进制写入文件,以正确处理图片文件的写入。
通过以上的修正,代码中的问题和错误得到了修复。这样的代码可以进行网页的爬取和图片、文本的保存。
使用方法:
- 将代码保存为 Python 文件 (例如
crawler.py)。 - 运行代码:
python crawler.py - 代码会将提取到的图片和文本内容保存到
Yuanshi文件夹中。
注意:
- 代码中的
startUrl是要爬取的网页地址,可以根据需要修改。 - 代码中的正则表达式需要根据目标网站的HTML结构进行调整。
- 爬取网页时,请遵守网站的 robots.txt 协议。
原文地址: https://www.cveoy.top/t/topic/jiK 著作权归作者所有。请勿转载和采集!