为什么用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?


3 回复

因为你的 getImg()没有返回任何值,所以你输出的结果就是 none


问题分析: 用Python爬取网页得到None,通常是因为请求未成功或解析方式有误。最常见的原因是:

  1. 目标网站有反爬机制(如验证User-Agent)。
  2. 网页内容通过JavaScript动态加载,而普通请求无法获取。
  3. 解析代码(如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}")

关键点说明:

  1. 添加请求头:许多网站会拒绝没有User-Agent的请求。
  2. 检查响应状态:使用response.raise_for_status()确保请求成功。
  3. 验证元素存在:在提取数据前检查元素是否找到。

如果问题依旧:

  • 检查网页是否通过JS加载内容(可用浏览器开发者工具查看网络请求)。
  • 尝试使用response.textresponse.content分别调试。
  • 确认CSS选择器/XPath是否正确匹配元素。

一句话建议: 检查请求头、响应状态和元素选择器是否匹配。

首先,这个网址里的图片地址并不在网页源码里,你单纯的在这个网页源码里去搜这个.jpg 是不会有结果的,不信你可以在 html = page.read() 后面加一句 print(html),看看里面是否有 jpg。
其次,就算你改进了程序,得到了图片地址 你也要在 getImg()这个程序的里写 “return 图片地址的变量”,才会打印出来你想要的,getImg()如果不 return 东西的话,你打印它就是 none

回到顶部