我刚刚学习了如何使用request.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)
请帮助!
谢谢
答案 0 :(得分:0)
User-Agent请求标头包含一个特征字符串,该特征字符串使网络协议对等方可以识别请求软件用户代理的应用程序类型,操作系统,软件供应商或软件版本。在服务器端验证User-Agent标头是一项常见操作,因此请确保使用有效的浏览器的User-Agent字符串,以避免被阻止。
(来源: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'
}