扇贝读书营指导讲义爬取

首先用selenium+chrome爬取每日学习的页面,把每天的讲义链接(微信页面地址)爬下来。

检查URL发现每天的页面只有日期不同,例如:

    https://www.shanbay.com/web/checkinplan/camp/user/plans/etchq?date=2018-03-16&course_type=read

    https://www.shanbay.com/web/checkinplan/camp/user/plans/etchq?date=2018-03-17&course_type=read

因此,利用timedate构造每天的日期字符串,然后拼接起来。

爬取时将讲义的链接保存到CVS文件,方便后续操作。

由于扇贝读书营的网页需要用户登陆,所以使用了Chorme的用户配置,这样只要自己登陆过一次,短期内就可以使用爬虫了。

#!/usr/bin/python
#coding:utf-8
#异常处理没有做,如果页面没有讲义的地址会报错。

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from datetime import date
import datetime
import time
import csvout

d = date(2018,2,24)
delta = datetime.timedelta(days=1)
#tim = "2017-11-26"
chptions = Options()
chptions.add_argument("user-data-dir=C:\Users\GTMer\AppData\Local\Google\Chrome\User Data")
driver = webdriver.Chrome("chromedriver.exe", chrome_options = chptions )
#driver.get("https://www.baidu.com")
url_head = "https://www.shanbay.com/web/checkinplan/camp/user/plans/etchq?date="
url_tail = "&course_type=read"
num = 0
while num < 21:  #21是天数
    m_date = d.strftime("%Y-%m-%d")
    m_url = url_head + m_date + url_tail
    driver.get(m_url)
    time.sleep(3)
    elem = driver.find_element_by_xpath('//*[@id="room-card"]/div/a[2]')
    url = elem.get_attribute('href')
    print url
    csvout.dict2csv({m_date:url})
    num = num + 1
    d = d + delta
driver.quit()

另附自己写的存入csv文件的python函数。

import csv

def dict2csv(dict):
    with open('output.csv', 'a+b') as f:
        w = csv.writer(f)
        w.writerows(dict.items())

def list2csv(li):
    with open('output.csv', 'a+b') as f:
        w = csv.writer(f)
        w.writerow(li)


得到CSV文件(微信页面地址)后,麻烦来了。保存网页我采用了pyautogui模拟鼠标键盘操作的方式,ctrl+s和Enter保存,但是微信的面是当前图片在页面中显示才会加载图片,屏幕区以外的图片不会加载,这就导致了保存下来的网页没有图片。这是很尴尬的事情。附上无图的爬虫T^Tdemo。

#!/usr/bin/python
#coding:utf-8
#http://mp.weixin.qq.com/s/a2479Bap5nfU9awB1xYOnQ

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from datetime import date
import datetime
import time
import csvout
import pyautogui

driver = webdriver.Chrome("chromedriver.exe")
driver.get("http://mp.weixin.qq.com/s/a2479Bap5nfU9awB1xYOnQ")
time.sleep(3)
pyautogui.scroll(-10000000)
time.sleep(3)
pyautogui.hotkey('ctrl', 's')
time.sleep(3)
pyautogui.press('enter')

driver.quit()

要想完整的下载网页是个很麻烦的事情,参见知乎问题如何完整离线保存网页,包括网页完整特效?为什么网页保存软件或插件都需要重新排版?

舍友给的方法是获取网页中图片的链接,图片都下载下来,然后修改掉源代码中的图片路径,改为保存的图片路径。听起来似乎是可以,但是好麻烦,等以后闲下来慢慢弄吧。

刷题去了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值