我无法使用requests.get和beautifulsoup获取所需的完整html内容

2024-06-16 16:36:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚学习了如何使用requests.get方法来废弃数据

我想得到完整的html代码,如Chrome提供的开发工具所示

但是,由于某种原因,我不能

我正在使用python3.x

import requests
from bs4 import BeautifulSoup

url_test = "http://zozo.jp/shop/ryuryu/goods/36213553/?did=62016020"
r = requests.get(url_test)
r.status_code
html = r.content 
soup = BeautifulSoup(html, 'html.parser') 
print(soup) 

我得到的结果如下所示

r.status_code
200

print(soup)
    <!DOCTYPE html>

<html lang="ja">
<head>
<meta charset="utf-8"/>
<title>お知らせ - ZOZOTOWN</title>
<meta content="" name="description"/>
<meta content="ZOZO,ZOZOTOWN,ゾゾ,ゾゾタウン,ぞぞ,ぞぞたうん,ファッション通販,通販,通信販売,ec" name="keywords"/>
<meta content="noindex,nofollow,noydir,noodp" name="robots"/>
<meta content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport"/>
<meta content="telephone=no" name="format-detection"/>
<meta content="IE=edge" http-equiv="X-UA-Compatible"/>
<meta content="10;URL=http://zozo.jp/" http-equiv="refresh"/>
<link href="assets/favicon.ico" rel="shortcut icon"/>
<link href="assets/base.css" rel="stylesheet"/>
<style>
            .container { margin-bottom:40px; text-align:center; }
            .header-brand { margin-top:25px; margin-bottom:40px; }
            .header-brand-img { width:183px; }
            .text-body { margin-top:25px; margin-bottom:0; line-height:1.846153846; }
            .bow { margin-top:25px; margin-bottom:0; }
            .bow-img { margin-left:10px; width:108px; }
            .info { margin-top:15px; margin-bottom:0; font-size:10px; line-height:1.7; }
            .info-link { color:#27a301; text-decoration:underline; }

            @media (min-width:768px) {
                    .header-brand { margin-top:40px; margin-bottom:55px; }
                    .header-brand-img { width:206px; }
                    .text-body { font-size:16px; line-height:1.9375; }
                    .bow-img { width:147px; }
                    .info { font-size:14px; line-height:1.785714286; }
            }
    </style>
</head>
<body>
<div id="container">
<div class="container">
<h1 class="header-brand">
<img alt="ZOZOTOWN" class="header-brand-img" src="assets/header-brand-logo.png"/>
</h1>
<p class="text-body">
                    平素よりZOZOTOWNを<br/>
                    ご利用いただきありがとうございます。
            </p>
<p class="text-body">
                    現在、サイトが混み合っております。
            </p>
<p class="text-body">
</p>
<p class="text-body">
                    お客様にはご迷惑おかけいたしますが<br/>
                    しばらく時間を置いて再度アクセスして<br/>
                    いただきますようお願いいたします。
            </p>
<p class="text-body">
                    株式会社ZOZO
            </p>
<p class="bow">
<img alt="" class="bow-img" src="assets/bow-img.png"/>
</p>
<p class="info">
<a class="info-link" href="https://line.me/S/sticker/1675710" target="_blank">
                            ZOZOTOWN公式キャラクター 「箱猫マックス」<br/>
                            LINE スタンプ 販売中
                    </a>
</p>
</div>
</div>
</body>
</html>    

上面的结果和我预期的不一样

请访问此页面查看完整的html(http://zozo.jp/shop/ryuryu/goods/36213553/?did=62016020

请帮帮我

谢谢


Tags: textmarginhttpimghtmlbodycontentwidth
1条回答
网友
1楼 · 发布于 2024-06-16 16:36:59

The User-Agent request header contains a characteristic string that allows the network protocol peers to identify the application type, operating system, software vendor or software version of the requesting software user agent. Validating User-Agent header on server side is a common operation so be sure to use valid browser’s User-Agent string to avoid getting blocked.

(来源: http://go-colly.org/articles/scraping_related_http_headers/

你唯一需要做的就是设置一个合法的用户代理。因此,将标题添加到 模拟浏览器:

# This is a standard user-agent of Chrome browser running on Windows 10 
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36' } 

示例:

from bs4 import BeautifulSoup
import requests 
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'} 
resp = requests.get('http://zozo.jp/shop/ryuryu/goods/36213553/?did=62016020', headers=headers).text 
soup = BeautifulSoup(resp, 'html.parser') 
print (soup)

此外,您还可以添加另一组头文件以假装是合法的浏览器。添加更多标题,如下所示:

headers = { 
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 
    'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Language' : 'en-US,en;q=0.5', 
    'Accept-Encoding' : 'gzip', 
    'DNT' : '1', # Do Not Track Request Header 
    'Connection' : 'close' 
}

相关问题 更多 >