lowes.comから製品情報をスクラップしようとしています。私のテストは特にこの製品AirStone 8-sq ft Autumn Mountain Faux Stone Veneerです。 JavaScriptを有効にしていないページにアクセスしたとき(urllib /要求が拾わないかもしれないことを確認するため)上記のいずれかのパッケージを使用しようとすると、ウェブページWebscrapingがドキュメントurllibまたはリクエスト全体を取得していない
ちょうどそのようなセクションは、私がスクレイピングに必要なセクションです(特に価格情報、他のすべては魔法のように利用できます)。私はスピードのためにセレンを使用しないことを好むでしょう。要求とthusly
共通項目
from urlopen import Request, urlopen
import requests # switch as needed with urlopen
import gzip # manual deflation required with Request object urlopen or so I've found
url = "https://www.lowes.com/pd/AirStone-8-sq-ft-Autumn-Mountain-Faux-Stone-Veneer/50247201"
headers = {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept-Language": "en-US,en;q=0.8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"DNT": "1",
# "Host": "www.lowes.com", Tried, no difference
"Pragma": "no-cache",
# "Referer": "https://www.lowes.com/", Tried, no difference
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1 Win64 x64) AppleWebKit/537.36 (KHTML,"
" like Gecko) Chrome/59.0.3071.115 Safari/537.36" # <=- Tried placing all on one line, didn't make a difference
}
Urlopen
req = Request(url, None, headers)
page = gzip.decompress(urlopen(req).read()).decode('utf-8')
with open("content.txt", "w") as f:
f.write(page) # <=- missing the 59.97 price tag anywhere in the document :(
要求
sessions = requests.Session()
page = sessions.get(self.url, headers=headers)
with open("content.txt", "w") as f:
f.write(page) # <=- Also missing the 59.97 price tag anywhere in the document :'(
を見てurllibは両方のための私の現在の使用量は、そこで問題は、私が何かをしないのですか?これが欠落する理由はありますか?それは私がそれが多くの時間の問題であることを見たようにデータを掻き集める前に意図的にそれを無効にするので、javascriptに関連していません。
ご協力いただければ幸いです。
あなたが戻ってきたページには、「価格と在庫状況についてあなたの場所を入力してください」というメッセージが表示されます。実際のブラウザでは、あなたの場所をウェブサイトに提供している前回の訪問時のCookieがあります。リクエストメソッドのいずれかでCookieを含めることは可能ですが、詳細はわかりません。 – jasonharper
それは私がクッキーを削除したと思った素晴らしいキャッチです。どうやら私はしていなかった。それは非常に非常に良いインターネットの住人に感謝:) Tally-Ho私が見つけることができるかを確認する – Akidi