首先用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()
要想完整的下载网页是个很麻烦的事情,参见知乎问题如何完整离线保存网页,包括网页完整特效?和为什么网页保存软件或插件都需要重新排版?
舍友给的方法是获取网页中图片的链接,图片都下载下来,然后修改掉源代码中的图片路径,改为保存的图片路径。听起来似乎是可以,但是好麻烦,等以后闲下来慢慢弄吧。
刷题去了!