我試圖從this page刮取內容,請參閱下面的代碼。不過,我很好奇,就好像我反覆運行代碼一樣,即使瀏覽器中顯示的頁面是相同的,我仍然會得到不同的作業位置列表(以及評論)。 例如第一次迭代是正確的,但第二次使用相同的起始URL運行腳本,位置「大學村」和「遠程遠程工作」從列表中消失(和「聖薩爾瓦多」和「亞特蘭大」輸入,以便列表長度相同)。用Beautifulsoup刮 - 內容與顯示頁面不同
據我所知,沒有「隱藏」文本,即。所有這些應該是可見的(並且在第一次迭代中)。 發生了什麼事?我如何確保抓取所有內容(我需要重複幾千頁,因此我不想手動查看報廢的數據)。
This question是相關的,但我不認爲這是知識產權問題,在這裏,因爲我可以在第一次迭代中顯示的內容。
編輯補充:代碼居然跳過一些評論,即使那些被識別,就我所看到的,酷似代碼拿起的。
下面是代碼(簡化):
list_url= ["http://www.indeed.com/cmp/Microsoft/reviews?fcountry=ALL"]
for url in list_url:
base_url_parts = urllib.parse.urlparse(url)
while True:
raw_html = urllib.request.urlopen(url).read()
soup = BeautifulSoup(raw_html,"lxml")
review_tag={'class':re.compile("cmp-review-container")}
reviews=soup.find_all(attrs=review_tag)
job_locations=[]
for r in reviews:
if r.find(attrs={'class':"cmp-reviewer-job-location"}) != None:
job_location=r.find(attrs={'class':"cmp-reviewer-job-location"}).get_text().strip().encode('utf-8')
else:
job_location = "."
job_locations.append(job_location)
#Zip the data and write the observations to the CSV file
try:
last_link = soup.find('div', id='company_reviews_pagination').find_all('a')[-1]
if last_link.text.startswith('Next'):
next_url_parts = urllib.parse.urlparse(last_link['href'])
url = urllib.parse.urlunparse((base_url_parts.scheme, base_url_parts.netloc,
next_url_parts.path, next_url_parts.params, next_url_parts.query,
next_url_parts.fragment))
print(url)
else:
break
except:
break
csvfile.close()
PS。對不起,如果這不是發佈此問題的正確地方;讓我知道在這種情況下更合適的地方。
謝謝。有什麼方法可以使用CasperJS來打開和讀取url,但是保持處理部分是基於美麗的?或者如果我使用ghost.py(再次保持代碼的主要部分不變),我會得到相同的結果嗎? 我是一個初學者,從頭到尾都是,嗯,恐嚇? :) –
嗨anne_t,在我看來,將bs和casperjs一起使用的一般方法是使用單個進程(如Popen)在py中調用casperjs腳本,並使用bs處理由casperjs下載的html。此外,我編輯我的答案並將PhantomJS和bs鏈接在一起。我不知道ghost.py部分,我沒有處理它之前:) – linpingta
謝謝!我一定會查找它! –