为什么用Python爬取这个网页的输出却得到None?
#coding=utf-8
import urllib
import re
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r’src="(.+?.jpg)" pic_ext’
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl,’%s.jpg’ % x)
x+=1
html = getHtml(“http://7mx.com/photo/444648”)
print getImg(html)
为什么用Python爬取这个网页的输出却得到None?
因为你的 getImg()没有返回任何值,所以你输出的结果就是 none
问题分析:
用Python爬取网页得到None,通常是因为请求未成功或解析方式有误。最常见的原因是:
- 目标网站有反爬机制(如验证User-Agent)。
- 网页内容通过JavaScript动态加载,而普通请求无法获取。
- 解析代码(如BeautifulSoup)未正确匹配到目标元素。
解决方案: 这里提供一个完整的可运行示例,包含错误处理和常见修复方法:
import requests
from bs4 import BeautifulSoup
# 目标URL(请替换为实际网址)
url = "https://example.com"
# 设置请求头,模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
try:
# 发送GET请求
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查请求是否成功
# 解析HTML
soup = BeautifulSoup(response.content, 'html.parser')
# 示例:提取页面标题(请根据实际需求修改选择器)
title = soup.find('title')
if title:
print("网页标题:", title.text)
else:
print("未找到标题元素")
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
except Exception as e:
print(f"解析错误: {e}")
关键点说明:
- 添加请求头:许多网站会拒绝没有
User-Agent的请求。 - 检查响应状态:使用
response.raise_for_status()确保请求成功。 - 验证元素存在:在提取数据前检查元素是否找到。
如果问题依旧:
- 检查网页是否通过JS加载内容(可用浏览器开发者工具查看网络请求)。
- 尝试使用
response.text和response.content分别调试。 - 确认CSS选择器/XPath是否正确匹配元素。
一句话建议: 检查请求头、响应状态和元素选择器是否匹配。
首先,这个网址里的图片地址并不在网页源码里,你单纯的在这个网页源码里去搜这个.jpg 是不会有结果的,不信你可以在 html = page.read() 后面加一句 print(html),看看里面是否有 jpg。
其次,就算你改进了程序,得到了图片地址 你也要在 getImg()这个程序的里写 “return 图片地址的变量”,才会打印出来你想要的,getImg()如果不 return 东西的话,你打印它就是 none

