【发布时间】:2017-12-05 08:22:23
【问题描述】:
所以我有使用 Selenium 和 BeautifulSoup 来抓取这个网站的脚本: 'http://m.1688.com/page/offerlist.htmlspm=a26g8.7664812.0.0.R19GYe&memberId=zhtiezhi&sortType=tradenumdown'
但我的脚本继续打印页面的前 8 个元素,而忽略滚动时出现的内容。这是脚本:
# -*- coding: utf-8 -*-
from urllib import urlopen
from bs4 import BeautifulSoup as BS
import unicodecsv as ucsv
import re
from selenium import webdriver
import time
with open('list1.csv','wb') as f:
w = ucsv.writer(f, encoding='utf-8-sig')
driver =
webdriver.Chrome('C:\Users\V\Desktop\PY\web_scrape\chromedriver.exe')
base_url = 'http://m.1688.com/page/offerlist.html?
spm=a26g8.7664812.0.0.R19GYe&memberId=zhtiezhi&sortType=tradenumdown'
driver.get(base_url)
pageSource = driver.page_source
lst = []
for n in range(10):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
soup = BS(pageSource, 'lxml')
container = soup.find('div', {'class' : 'container'})
items = container.findAll('div', {'class' : 'item-inner'})
for item in items:
title = item.find('div', {'class' : 'item-price'}).text
title_ = ''.join(i for i in title if ord(i) < 128 if i != '\n')
lst.append(title_)
print lst
time.sleep(5)
每个滚动的输出是:
[u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00']
[u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00', u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00']
[u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00', u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00', u'0.21', u'0.45', u'1.10', u'3.60', u'2.20', u'6.80', u'1.40', u'3.00']
第一个滚动列表有 8 个元素,第二个滚动列表有 16 个元素,额外的 8 个元素从第一个滚动重复。其余的卷轴也会发生同样的事情。 因此,即使我使用 selenium 滚动站点,脚本也只返回 8 个元素,但我希望它在滚动时打印出所有元素。如果你们能给我一些建议,我将不胜感激。
【问题讨论】:
标签: python selenium web-scraping beautifulsoup