-1
我想从这两个网站刮取定价信息:site1和site2 我正在使用Python和包装BeautifulSoup和请求。蟒蛇网站抓取与丢失的源代码
我意识到价格部分在两个站点的源代码中都不可用。所以我想知道如何才能抓取数据。
任何意见,将不胜感激。谢谢
我想从这两个网站刮取定价信息:site1和site2 我正在使用Python和包装BeautifulSoup和请求。蟒蛇网站抓取与丢失的源代码
我意识到价格部分在两个站点的源代码中都不可用。所以我想知道如何才能抓取数据。
任何意见,将不胜感激。谢谢
问题是,首先你需要选择一个国家来查看价格。
在技术意义上说,你需要做一个POST请求http://www.strem.com/catalog/index.php
选择一个国家,那么你就可以得到价格:
from bs4 import BeautifulSoup
import requests
URL = "http://www.strem.com/catalog/v/29-6720/17/copper_1300746-79-5"
session = requests.session()
p = session.post("http://www.strem.com/catalog/index.php", {'country': 'USA',
'page_function': 'select_country',
'item_id': '7211',
'group_id': '17'})
response = session.get(URL)
soup = BeautifulSoup(response.content)
print [td.text.strip() for td in soup.find_all('td', class_='price')]
此打印:
[u'US$85.00', u'US$285.00', u'US$1,282.00', u'US$3,333.00']
一个更优雅的解决方案将使用mechanize
包裹提交表格:
import cookielib
from bs4 import BeautifulSoup
import mechanize
URL = "http://www.strem.com/catalog/v/29-6720/17/copper_1300746-79-5"
browser = mechanize.Browser()
cj = cookielib.LWPCookieJar()
browser.set_cookiejar(cj)
browser.open(URL)
browser.select_form(nr=1)
browser.form['country'] = ['USA']
browser.submit()
data = browser.response().read()
soup = BeautifulSoup(data)
print [td.text.strip() for td in soup.find_all('td', class_='price')]
打印:
[u'US$85.00', u'US$285.00', u'US$1,282.00', u'US$3,333.00']
如果您突出显示部分和视图元素,您将看到信息。但是,如果您只是查看源代码,那么您看不到定价部分 – user3670589
为什么该帖子标有这样一个奇怪的“太宽”的标志?这个问题对于特定网站上的特定问题非常具体。 – alecxe
你能评论第二个链接吗?我可以用类似的方式来处理它吗? – user3670589