在python中以编程方式打开页面

Teo*_*pan 3 python mechanize urllib2 beautifulsoup web-scraping

你能从这个网页中提取VIN号吗?

我试过urllib2.build_opener,请求和机械化.我也提供了用户代理,但他们都没有看到VIN.

opener = urllib2.build_opener()
opener.addheaders = [('User-agent',('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_7) ' 'AppleWebKit/535.1 (KHTML, like Gecko) ' 'Chrome/13.0.782.13 Safari/535.1'))]
page = opener.open(link)
soup = BeautifulSoup(page)

table = soup.find('dd', attrs = {'class': 'tip_vehicleStats'})
vin = table.contents[0]
print vin
Run Code Online (Sandbox Code Playgroud)

Len*_*bro 7

该页面的大部分信息都是通过Javascript加载和显示的(可能是通过Ajax调用),最有可能直接防止抓取.因此,要么你需要使用运行Javascript的浏览器,并远程控制它,或者在javascript中编写scraper本身,或者你需要解构网站并确定它用Javascript加载的确切内容以及如何,并查看是否你可以复制这些电话.


shs*_*ank 5

您可以使用浏览器自动化工具来实现此目的.

例如,这个简单的selenium脚本可以完成你的工作.

from selenium import webdriver
from bs4 import BeautifulSoup

link = "https://www.iaai.com/Vehicles/VehicleDetails.aspx?auctionID=14712591&itemID=15775059&RowNumber=0"
browser = webdriver.Firefox()
browser.get(link)
page = browser.page_source

soup = BeautifulSoup(page)

table = soup.find('dd', attrs = {'class': 'tip_vehicleStats'})
vin = table.contents.span.contents[0]
print vin
Run Code Online (Sandbox Code Playgroud)

BTW,table.contents[0]打印整个范围,包括span标签.

table.contents.span.contents[0] 仅打印VIN号.