爬虫.微博的抓取

---恢复内容开始---

1.分布式爬虫

  1.使用Selenium+Phantoms

   登录

   最重要的设置是User-Agent(UA),否则无法跳转链接

    from selenium.webdriver.common.desired_capabilities(功能) import DesiredCapabilities

    User_Agent=(..........................................)

    dcap=dict(DesiredCapabilities.PHANTOMJS)

    dcap=["phantomjs.page.settings.UserAgent"]=user_agent

    driver=webdriver.phantomJS(desired_capabilities=dcap)

   使用用户名与密码

    <input id="loginname"

    type="text"

    class="W_input"maxlength="128"

    autocomplete="off"

    action-data="text=邮箱/会员账号/手机号”

    action-type="text_copy"

    name="username"

    node-type="username"tabindex="1"

  为了与微博内容交互,需要使用JavaScript

   相关JavaScript代码:

    document.getElementByID(‘loginname’).value=‘abc’

    document.getElementByName(‘password’)[0].value='abc'

   通过Selenium提供的send_keys来传递value

    driver.find_element_by_id(‘loginname’).send_keys(username)

    driver.find_element_by_name(‘password’).send_keys(password)

  2.微博web图分析

   关注列表、粉丝列表、作为漫游weibo的外链

   获取微博外链

    driver.find_element_by_xpath(‘//a[@class="t_link S_txt1"]’)

   打开关注列表页

    driver.find_element_by_xpath(‘//a[@class="t_link S_txt1"]’).get_attribute('href')

   获取所有关注的微博号的地址:

    driver.find_element_by_xpath(‘//*[contains(@class,'follow_item']//a[@class=" S_txt1"]’)

  3.获取微博用户信息

   提取用户的基本信息

    链接:用正则表达式把用户的链接参数都去掉

    微博昵称及头像

    关注、粉丝及微博数量

    过滤质量差的用户。对于微博数量少于阈值,或者关注数量超过粉丝数N倍以上的,判定为僵尸粉或广告微博,直接跳过

    提取下一页,可以继续查找更多的user

   微博信息抽取

    微博名:driver.find_element_by_tag_name(‘h1’)      #element ,元素

    所有的Feed:driver.find_element_by_class_name(‘WB_detil’)

    feed={ }

   微博图片信息

    re.findall('/([^/]+$',image.get_attribute('src'))

    微博的图片,只需要保存图片名

    http://存储域名/分辨率/文件名

  滚频与翻页

    每次滚动后检查是否已经出现

  

   微博下一页的class

    page next S_txt1 S_line1

    driver.find_element_by_xpath(‘//a[@class="page next S_txt1 S_line1"]’).click()

   翻页命令:

    driver.execute_script(‘window。scrollTo(0,document.body.scrollHeight)’)      #execute ,执行

   滚屏与翻页

    每次滚动后,检查是否已经出现了“下一页”的按钮,如果是则可以停止翻页,否则检查是否出现了“网络超时”的链接,是的话,点击这个链接重新加载

     滚屏

      for i in range(0,10):

        driver.execute_script(‘window.srollTo(0,document.body.scrollHeight)’)

        html=driver.page_source

        tr=etree.HTML(html)

        next_page_url=tr.xpath('//a[contains(@class,'page next")]')

        if ien(next_page_url)>0:

          return next_page_url[0].get_attribute('href')

        if ien(re.findall('点击重新载入‘,html))>0:

          driver.find_element_by_link_text(‘点击重新加载’).click( )

  微博抓取框架:

    web1:Crawler(爬行者)                     web2:User Info

      

  微博接口分析:

    微博域名:http://m.weibo.cn

    这是微博的首页网页版,能看到结构非常简单,能直接拿到Feed流,可以尝试从移动端来分析微博的数据API接口

    个人首页:

    包含一些未知参数列表uid、luicode、ifid、featurecode

    个人feed流:

    AJAX请求

        

      

      type:通过uid方式查询

      value:user id

      containerid:容器的id号=107603+uid

    个人feed流翻页

      向下滚动,获得更多feed流,观察新的请求

      type:通过uid方式查询

      value:user id

      containerid:容器的id号=107603+uid

      page:当前请求的页码

    点击打开个人关注页

      3个接口

        关注列表:followersrecomm_-_126632

        推介列表:followers_-_1266321801&lui

        粉丝列表:fans_-_1266321801&luicode

 

---恢复内容结束---

1.分布式爬虫

  1.使用Selenium+Phantoms

   登录

   最重要的设置是User-Agent(UA),否则无法跳转链接

    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities    #capabilities,功能

    User_Agent=(..........................................)

    dcap=dict(DesiredCapabilities.PHANTOMJS)

    dcap=["phantomjs.page.settings.UserAgent"]=user_agent

    driver=webdriver.phantomJS(desired_capabilities=dcap)

   使用用户名与密码

    <input id="loginname"

    type="text"

    class="W_input"maxlength="128"

    autocomplete="off"

    action-data="text=邮箱/会员账号/手机号”

    action-type="text_copy"

    name="username"

    node-type="username"tabindex="1"

  为了与微博内容交互,需要使用JavaScript

   相关JavaScript代码:

    document.getElementByID(‘loginname’).value=‘abc’

    document.getElementByName(‘password’)[0].value='abc'

   通过Selenium提供的send_keys来传递value

    driver.find_element_by_id(‘loginname’).send_keys(username)

    driver.find_element_by_name(‘password’).send_keys(password)

  2.微博web图分析

   关注列表、粉丝列表、作为漫游weibo的外链

   获取微博外链

    driver.find_element_by_xpath(‘//a[@class="t_link S_txt1"]’)

   打开关注列表页

    driver.find_element_by_xpath(‘//a[@class="t_link S_txt1"]’).get_attribute('href')

   获取所有关注的微博号的地址:

    driver.find_element_by_xpath(‘//*[contains(@class,'follow_item']//a[@class=" S_txt1"]’)

  3.获取微博用户信息

   提取用户的基本信息

    链接:用正则表达式把用户的链接参数都去掉

    微博昵称及头像

    关注、粉丝及微博数量

    过滤质量差的用户。对于微博数量少于阈值,或者关注数量超过粉丝数N倍以上的,判定为僵尸粉或广告微博,直接跳过

    提取下一页,可以继续查找更多的user

   微博信息抽取

    微博名:driver.find_element_by_tag_name(‘h1’)

    所有的Feed:driver.find_element_by_class_name(‘WB_detil’)

    feed={ }

   微博图片信息

    re.findall('/([^/]+$',image.get_attribute('src'))

    微博的图片,只需要保存图片名

    http://存储域名/分辨率/文件名

  滚频与翻页

    每次滚动后检查是否已经出现

  

   微博下一页的class

    page next S_txt1 S_line1

    driver.find_element_by_xpath(‘//a[@class="page next S_txt1 S_line1"]’).click()

   翻页命令:

    driver.execute_script(‘window。scrollTo(0,document.body.scrollHeight)’)

   滚屏与翻页

    每次滚动后,检查是否已经出现了“下一页”的按钮,如果是则可以停止翻页,否则检查是否出现了“网络超时”的链接,是的话,点击这个链接重新加载

     滚屏

      for i in range(0,10):

        driver.execute_script(‘window.srollTo(0,document.body.scrollHeight)’)

        html=driver.page_source

        tr=etree.HTML(html)

        next_page_url=tr.xpath('//a[contains(@class,'page next")]')    #contains,包含

        if ien(next_page_url)>0:

          return next_page_url[0].get_attribute('href')

        if ien(re.findall('点击重新载入‘,html))>0:

          driver.find_element_by_link_text(‘点击重新加载’).click( )

  微博抓取框架:

    web1:Crawler                     web2:User Info

      

  微博接口分析:

    微博域名:http://m.weibo.cn

    这是微博的首页网页版,能看到结构非常简单,能直接拿到Feed流,可以尝试从移动端来分析微博的数据API接口

    个人首页:

    包含一些未知参数列表uid、luicode、ifid、featurecode

    个人feed流:

    AJAX请求

        

      

      type:通过uid方式查询

      value:user id

      containerid:容器的id号=107603+uid

    个人feed流翻页

      向下滚动,获得更多feed流,观察新的请求

      type:通过uid方式查询

      value:user id

      containerid:容器的id号=107603+uid

      page:当前请求的页码

    点击打开个人关注页

      3个接口

        关注列表:followersrecomm_-_126632

        推介列表:followers_-_1266321801&lui

        粉丝列表:fans_-_1266321801&luicode

 

posted @ 2019-03-12 16:45  jacky912  阅读(313)  评论(0编辑  收藏  举报