나는 BeautifulSoup 및 Mechanize in Python을 사용하여 학술 프로젝트를위한 간단한 스크래핑 프로그래밍을 작성하려고합니다. 아마존에서 일부 제품의 가격을 책정하려고합니다. 가격 책정 모델에 대한 다양한 이론을 테스트하고 싶기 때문입니다. 내가 겪고있는 문제는 BeautifulSoup가 HTML의 전체 페이지를 Mechanize에서 임의로 가져 가지 않는다는 것입니다. 나는 텍스트 파일에 오류가 있으며 기계화 페이지가 완전히 형성 될 때마다 인쇄했지만 BeautifulSoup 페이지는 절반 밖에 없습니다. 나는 BeautifulSoup output이 페이지의 Mechanize output을 업로드 한BeautifulSoup이 올바르지 않음 모든 HTML 채우기
def process_product_url(product_url):
"""Scrapes and returns all the data in the given product url"""
#Download product_page given product_url
product_page_mech, product_page_bs = get_product_page_mech_bs(product_url)
#Extract Price
price = extract_price(product_page_bs)
return price
def get_product_page_mech_bs(url):
"""Takes a product page url in str and returns the mech page and bs page"""
while True:
mech_page = get_mech_page(url)
bs_page = BeautifulSoup(unicode(mech_page.response().read(), 'latin-1'))
if not test_product_page(bs_page):
log(unicode(bs_page))
log(unicode(mech_page.response().read(), 'latin-1'))
continue
return mech_page, bs_page
def test_product_page(product_page_bs):
"""Takes a BS product page and tests to see if proper"""
if rank_page_bs.findAll('span', attrs={'id' : 'actualPriceValue'}) == []:
return False
else:
return True
def get_mech_page(url):
"""Given a URL, returns Mechanize page object"""
while True:
try:
br = initialize_browser()
br.open(url)
return br
except Exception, e:
print e
print traceback.print_exc()
continue
def initialize_browser():
"""Returns a fully setup mechanize browser instance"""
br = mechanize.Browser()
br.addheaders = [("User-agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1")]
return br
: 여기 내 코드는 HTTP : //www.amazon.com/Fujifilm-X-Pro-Digital-Camera-Body/dp/B006UV6YMQ/ref ? = sr_1_2의 = 전자 & 즉 = UTF8 & QID = 1,328,359,488 & SR = 1-2
편집 (I 두 개 이상의 링크를 붙여 넣을 수 없습니다) :
: 설명했습니다 &이
만약 우리가'get_mech_page'와 누군가가 이것을 시도해 줄 수있는 URL을 구현했다면 어떨까요? – hughdbrown
또,'mech_page'와'bs_page'를 출력하고,'urllib2.urlopen (url) .read()'를 사용하여 반환 된 원시 HTML과 비교할 수 있습니까? –