淘宝众筹数据爬取(3)

前文的讲述已经可以将一个页面上的所有项目的项目名称、已筹金额、达成率和支持人数提取出来,并且再通过进入单一页面的方式,将单个项目的上线时间和截止时间以及金额标的提取出来。由此,我们可以形成我们的提取逻辑,先是爬一个页面的项目信息,特别是要提取到项目的链接地址,然后由此可以将这个页面内的所有项目的详细信息提取出来,最后将信息进行组装和存储。因此需要用到双重循环,一个用于爬取多个页面,另一个用于爬取这一个页面内的每个项目页面。
首先引入所有需要的模块,这里又增加了几个,很重要的一个是让浏览器等待的WebDriverWait。因为发现这该死的页面,如果在没有加载完毕后,就去爬信息,基本上就是空白,所以就让浏览器等等吧。我设的是没加载完毕就再等10秒,也正是这个原因,导致整个爬虫的效率……唉,潸然泪下啊。

from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

设置两个列表,一个用来装每个项目的链接,一个用来装最后爬取的信息。

k=[]
url=[]
for i in range(1,2):
    href='https://izhongchou.taobao.com/list.htm?spm=a215p.1596646.0.0.24e247dbvPCFET#type=&page='+str(i)+'&status=&sort='
    url.append(href)

上面的range(1,2)是我做测试用的,只测第一个页面的信息是否能够完全提取,如果是要做批量信息收集,把范围扩大到你需要的页面数就好。据观察,如果想获取合适的数据,差不多要到13-14页左右才是目前还在筹款的项目,再往后那些已完结的项目信息是无法作为动态观察的对象了(因为你不知道它什么时候上线的,什么时候结束的)。这里的url只是得到每一个包含20个项目的页面地址。
然后就是我的双重循环:

for j in range(len(url)):
    print(url[j])
    driver=webdriver.Chrome()
    driver.get(url[j])
    try:
        element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME, "layout")))
    finally:
        time.sleep(10)
    html=driver.page_source
    soup = BeautifulSoup(html, 'html.parser')
    project=soup.find_all(name='li',class_ ='project-item')
    for li in project:
        ljdz=li.find('a',href=True)#链接地址
        title=li.find('span','project-intro').text#项目标题
        dcl=li.find('span','every-info').em.text#达成率
        ycje=li.find('span','every-info info-dollar').em.text#已筹金额
        zcrs=li.find('span','every-info info-left').em.text#支持人数
        driver1=webdriver.Chrome()
        driver1.get('https:'+ljdz['href'])
        try:
            element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CLASS_NAME, "layout")))
        finally:
            time.sleep(10)
        html=driver1.page_source
        soup=BeautifulSoup(html,'html.parser')
        jzsj=soup.find('p','target-money').text[6:16]#截止时间
        sysj=driver1.find_elements_by_class_name('data-number')#剩余时间[1].text
        k.append([title,dcl,ycje,zcrs,jzsj,sysj])
    driver.close()

最后把这些信息给存进文件吧

t=''
with open(r'd:\\a.txt','w') as f:
    for s in k:
        for ss in range(len(s)):
            t=t+s[ss]+' '
        f.write(t.strip(' '))
        f.write('\n')
        t=''

最终的效果也一般般,效率嘛,那就是低下了,肯定可以有很多改进的地方,至少这个浏览器等待时间和关闭操作方面还有很大的改进空间。
在这里插入图片描述
整个淘宝众筹的数据爬取就到此结束了,欢迎大神的指导,特别是在效率提升的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值