所以我想从visual.ly中删除可视化,但是现在我不明白“显示更多”按钮是如何工作的。截至目前,我的代码将获取图像链接,图像旁边的文本以及页面的链接。我想知道“显示更多”按钮是如何起作用的,因为我将尝试使用页面数量来循环。截至目前,我不知道我将如何单独循环每一个。关于我如何循环并继续获得比他们最初显示的更多图像的任何想法????
from BeautifulSoup import BeautifulSoup
import urllib2
import HTMLParser
import urllib, re
counter = 1
columnno = 1
parser = HTMLParser.HTMLParser()
soup = BeautifulSoup(urllib2.urlopen('http://visual.ly/?view=explore& type=static#v2_filter').read())
image = soup.findAll("div", attrs = {'class': 'view-mode-wrapper'})
if columnno < 4:
column = image[0].findAll("div", attrs = {'class': 'v2_grid_column'})
columnno += 1
else:
column = image[0].findAll("div", attrs = {'class': 'v2_grid_column last'})
visualizations = column[0].findAll("div", attrs = {'class': '0 v2_grid_item viewmode-item'})
getImage = visualizations[0].find("a")
print counter
print getImage['href']
soup1 = BeautifulSoup(urllib2.urlopen(getImage['href']).read())
theImage = soup1.findAll("div", attrs = {'class': 'ig-graphic-wrapper'})
text = soup1.findAll("div", attrs = {'class': 'ig-content-right'})
getText = text[0].findAll("div", attrs = {'class': 'ig-description right-section first'})
imageLink = theImage[0].find("a")
print imageLink['href']
print getText
for row in image:
theImage = image[0].find("a")
actually_download = False
if actually_download:
filename = link.split('/')[-1]
urllib.urlretrieve(link, filename)
counter += 1
答案 0 :(得分:1)
你不能在这里使用urllib-parser组合,因为它使用javascript来加载更多内容。为此,您需要一个完整的浏览器模拟器(支持javascript)。我之前从未使用过Selenium,但我听说它会这样做,并且有一个python binding
但是,我发现它使用了一种非常可预测的形式
http://visual.ly/?page=<page_number>
的GET请求。或许更简单的方法就是
<div class="view-mode-wrapper">...</div>
解析数据(使用上面的url格式)。毕竟,ajax请求必须转到某个位置。
然后你可以做
for i in xrange(<whatever>):
url = r'http://visual.ly/?page={pagenum}'.format(pagenum=i)
#do whatever you want from here