简书文章url爬取

爬去简书文章url,
  • 由于简书有两种加载页面方式
  1. 页面下拉加载更多,附带的参数为上面的文章id与page值


    下拉加载附带的参数.PNG
  2. 3页之后只有点击加载更多,加载方式不同

所以最好用模拟浏览器来爬取,首先下载PhantomJS,然后制定编译器

driver = webdriver.PhantomJS(
    executable_path=r'G:\MySorf\pythonTool\
    phantomjs-2.1.1-windows\phantomjs-2.1.1-windows'
                    r'\bin\phantomjs.exe')

先模拟下拉

<footer class="container">是简书页面的页脚

driver.find_element_by_css_selector("footer.container")\
        .send_keys(Keys.DOWN)

找到页脚,然后下拉

模拟点击加载更多

阅读更多的获取.PNG
        ac = driver.find_element_by_css_selector("a.load-more")
        ActionChains(driver).move_to_element(ac).click(ac).perform()

最后用xpath解析出url

ac = driver.find_element_by_css_selector("a.title")
list = driver.find_elements_by_xpath('//a[@class="title"]')

完整代码

# -*- coding:utf-8 -*-

# IPython2 测试代码

# 导入 webdriver
from selenium import webdriver
import time
# 要想调用键盘按键操作需要引入keys包
from selenium.webdriver.common.keys import Keys
# 如果没有在环境变量指定PhantomJS位置

# 导入 ActionChains 类
from selenium.webdriver import ActionChains

driver = webdriver.PhantomJS(
    executable_path=r'G:\MySorf\pythonTool\
    phantomjs-2.1.1-windows\phantomjs-2.1.1-windows'
                    r'\bin\phantomjs.exe')
# driver = webdriver.PhantomJS()
# get方法会一直等到页面被完全加载,然后才会继续程序,通常测试会在这里选择
driver.get("https://www.jianshu.com/")
js = "var q=document.documentElement.scrollTop=100000"
# 模拟js事件
driver.execute_script(js)

# 页面拉取到最底
for i in range(1, 20):
    driver.find_element_by_css_selector("footer.container") \
        .send_keys(Keys.DOWN)
    time.sleep(1)

# 鼠标移动到 ac 位置
try:
    # 模拟点击加载更多
    for i in range(1, 9):
        # a.load-more为阅读更多的css class
        ac = driver.find_element_by_css_selector("a.load-more")
        ActionChains(driver).move_to_element(ac).click(ac).perform()
        # 休眠
        time.sleep(4 + i)
except:
    print "exception"

ac = driver.find_element_by_css_selector("a.title")
list = driver.find_elements_by_xpath('//a[@class="title"]')
print list.__len__()
for link in list:
    with open("articleUrl.txt", "a") as f:
        f.write(link.get_attribute('href') + "\n")
    print (link.get_attribute('href'))

    # print driver.title
    # driver.save_screenshot("jianshu.png")

articleUrl.txt中

https://www.jianshu.com/p/11046c89367d
https://www.jianshu.com/p/94ba3a429f53
https://www.jianshu.com/p/e19b62bbdf39
https://www.jianshu.com/p/98770ea700f5
https://www.jianshu.com/p/b4d1dd505ed8
https://www.jianshu.com/p/881f512160c7
https://www.jianshu.com/p/22c5b6081eac
https://www.jianshu.com/p/f31e39d3ce41
https://www.jianshu.com/p/e57940123cc4
https://www.jianshu.com/p/3ea8262b0927

解析文章可以参考文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,026评论 3 119
  • 花了三天的时间读完了英国小说作家毛姆的《The Moon and Sixpence》,时间不算长,但是我并没有一目...
    暖和的猪阅读 523评论 0 1
  • 大家好 每日午豹来啦 乐视的新闻洋洋洒洒闹了好一阵子,远比连续剧精彩,广告费也省了。 1.贾跃亭辞职,乐视网复牌延...
    玫瑰钻石婚恋阅读 68评论 0 0
  • 会有一场雷雨。闪电划出天空的边界,雷声嘶裂空气,让一切碎裂在雨水里。
    半公斤蔬菜阅读 140评论 0 2
  • 我认为的跑步不仅仅局限于锻炼身体,更意味着坚持和向上的人生态度,它一定比你整天坐在椅子上或者躺在床上更有精气神神。...
    Amber520阅读 2,517评论 0 4