实际上,我是使用Python Beautifulsoup4进行解析的新手。我正在抓取this website。我需要首页上的当前每英里价格。
我已经花了3个小时了。在互联网上寻找解决方案时。我知道有一个PyQT4库,它可以像Web浏览器一样模拟并加载内容,然后在完成加载后就可以提取所需的数据。但是我坠毁了。
使用此方法以原始文本格式收集数据。我也尝试了其他方法。
def parseMe(url):
soup = getContent(url)
source_code = requests.get(url)
plaint_text = source_code.text
soup = BeautifulSoup(plaint_text, 'html.parser')
osrs_text = soup.find('div', class_='col-md-12 text-center')
print(osrs_text.encode('utf-8'))
Please have a look on this image。我认为问题在于:: before和:: after标签。页面加载后它们就会出现。
我们将不胜感激任何帮助。
答案 0 :(得分:1)
网页制作XHR来获取其中包含价格的JSON文件
import requests
r = requests.get('https://api.boglagold.com/api/product/?id=osrs-gold&couponCode=null')
j = r.json()
# print(j)
print('sellPrice', j['sellPrice'])
print('buyPrice', j['buyPrice'])
输出:
sellPrice 0.8
buyPrice 0.62
答案 1 :(得分:1)
如其他答案所述,此页面仅包含文本Current Price Per Mil:
和0USD
。中间的值0.8
是使用JS从下面描述的网址中动态获得的(可以通过using a process described (for example) here and many other places获得。该站点检查机器人,因此您拥有to use a method described (for example) here。
所以在一起:
url = 'https://api.boglagold.com/api/product/?id=osrs-gold&couponCode=null'
import requests
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'})
response.json()['sellPrice']
输出:
0.8
答案 2 :(得分:0)
您应该使用selenium
而不是`requests:
from selenium import webdriver
from bs4 import BeautifulSoup
def parse(url):
driver = webdriver.Chrome('D:\Programming\utilities\chromedriver.exe')
driver.get('https://boglagold.com/buy-runescape-gold/')
soup = BeautifulSoup(driver.page_source)
return soup.find('h4', {'id': 'curr-price-per-mil-text'}).text
parse()
输出:
'Current Price Per Mil: 0.80USD'
原因是该元素的值是通过requests
无法处理的JavaScript获取的。此特定代码段使用Chrome驱动程序;如果愿意,可以使用Firefox /其他等效浏览器(您需要安装selenium
库并自己寻找Chrome驱动程序)。
答案 3 :(得分:0)
问题是javascript动态添加了您要在该网站上剪贴的数据。您可以尝试在客户端上运行JS,等待获取要剪贴的数据,然后获取DOM内容-如果您要这样做,请查看@gmds answer。另一种方法是检查javascript代码发出了哪些请求,以及哪个请求包含您需要的信息。然后,您可以使用python发出该请求,并获得所需的数据,而无需使用PyQT4甚至BS4。