セレン&美しいスープは異なるLEN()と同じウェブサイトスクレイプ(アマゾン)の値を戻します

jamesishere:

以下のコード例では、私はのために異なる結果を取得print(len(block1))するコードの末尾にアイテムを。私はこれを引き起こしているかを把握するように見えることはできません。

  • 私のコード、
  • セレンとページの読み込み、
  • Amazonが使用する、または、抗引っかき方法のいくつかの並べ替え
  • 愚かなことは、私が行方不明です。

私の10件の最新の結果が得られました

LOG: 3/14/2020 - 2:30pm EDT 
Length Results for 10 separate runs:
0 / 20 / 55 / 25 / 57 / 55 / 6 / 59 / 54 / 39
# python version: 3.8.1
#Import necessary modules
from selenium import webdriver # version 3.141.0
from bs4 import BeautifulSoup # version 4.8.2

#set computer path and object to chrome browser
chrome_path = r"C:\webdrivers\chromedriver.exe"
browser = webdriver.Chrome(chrome_path)

# search Amazon for "bar+soap"
# use 'get' for URL request and set object to variable "source"
browser.get("https://www.amazon.com/s?k=soap+bar&ref=nb_sb_noss_2")
source = browser.page_source

#use Beautiful Soup to parse html
page_soup = BeautifulSoup(source, 'html.parser')

#set a variable "block1" to find all "a" tags that fit criteria
block1 = page_soup.findAll("a", {"class":"a-size-base"})

#print the number of tags pulled
print(len(block1))
スヴェトラーナLevinsohnの:

あなたのコードは正しく見えます。私は、彼らが常に一致し、私はセレンと美しいスープの両方でタグを集めて数えて、すべてが正常であることを確認するためにそれを少し変更しました。

私は最初は非常に異なる結果を得ていたので、私は、ページの読み込み後に7秒の待ち時間を追加しました。この作られたものより安定したが、要素のいくつかは、単に負荷に時間がかかるし、あなたが数えるときに、ページ上に存在しないことも可能です。

これは、完全に問題が解決しませんでした。私はまだ私が64(2)、65(6)、67(2)を得、10回の実行のために、異なる結果を取得しています。あなたのための私の推薦することです:

  1. 追加と増やしてみてくださいsleep、それがどのように動作するかを見ます。
  2. 結果をプリントアウトし、実際に試してみて、実行間の差異であるものを参照してください。
  3. 潜在的に、ちょうど多くのウェブサイトは、製品を実行するので、あなたが最も頻繁に取得し、その結果を使用してA / Bテストを(これは非常に可能性が私たちのケースである)と、同じページまたは同じページの異なるコンポーネントのために複数のUI /コンテンツバリエーションが存在することができます。私たちは、スクリプトを実行するたびだから、我々は特定のA / B変異体またはおそらく変異型の組み合わせ、これらの結果につながるに入ります。

念のため、私のコード:

#Import necessary modules
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep

#set computer path and object to chrome browser
browser = webdriver.Chrome()

# use 'get' for URL request and set object to variable "source"
browser.get("https://www.amazon.com/s?k=soap+bar&ref=nb_sb_noss_2")
sleep(7)
source = browser.page_source

#use Beautiful Soup to parse html
page_soup = BeautifulSoup(source, 'html.parser')

#set a variable "block1" to find all "a" tags that fit criteria
block1 = page_soup.findAll("a", {"class":"a-size-base"})
#print the number of tags pulled
print('BS', len(block1))

# To be save, let's also count with pure Selenium:
e = browser.find_elements_by_css_selector('a.a-size-base')
print('SEL', len(e))

これは、幸運をお役に立てば幸いです。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=284089&siteId=1