selenium的使用和scrapy的简单使用

selenium可以用来做自动化测试也可以拿来开发爬虫,因为selenium的网页是已经渲染过的,可以配合browsermob来嗅探视频

可以用chrome和firefox启动,我推荐firefox,因为firefox的profile好用多了。

普通的启动如下:

from selenium import webdriver
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
#或者
driver=webdriver.Firefox()
driver.get('http://www.baidu.com')

这样启动的浏览器是新的,没有任何的cookie信息,当初各种尝试导入cookie,直到我看到profile,火狐的profile目录在帮助--》故障排除信息--》配置文件--》根目录

profile=webdriver.FirefoxProfile(r'C:\Users\yearEamab\AppData\Roaming\Mozilla\Firefox\Profiles\q95dlwy9.default')
driver = webdriver.Firefox(profile)

这样启动的浏览器就是你使用的浏览器,只要你的浏览器中有cookie,登录过一次,就可以跳过登录,谷歌浏览器的如下,不过不知道是不是版本问题,启动后页面没跳转

option = webdriver.ChromeOptions()
option.add_argument(r'--user-data-dir=C:\Users\yearEamab\AppData\Local\Google\Chrome\User Data') #设置成用户自己的数据目录
driver = webdriver.Chrome(chrome_options=option)

打开微博

driver.maximize_window()#可以调整窗口大小
driver.implicitly_wait(5)
driver.get("https://weibo.com")
#打开新浪科技微博将第一条转发
driver.get("https://weibo.com/sinatech?is_all=1")
driver.find_element_by_xpath('//*[@id="Pl_Official_MyProfileFeed__27"]/div[1]/div[2]/div[2]/div/ul/li[2]/a').click()
time.sleep(15)
driver.find_element_by_xpath('//body/div[9]/div[2]/div[3]/div/div[2]/div/div[2]/div/div/div/div/textarea').clear()
driver.find_element_by_xpath('//body/div[9]/div[2]/div[3]/div/div[2]/div/div[2]/div/div/div/div/textarea').send_keys('厉害啊')
driver.find_element_by_xpath('//body/div[9]/div[2]/div[3]/div/div[2]/div/div[2]/div/div/div/div[2]/div/a').click()

time.sleep(5)
xpath的路径可以用检查里面的copyxpath简直方便,一开始我还去数,无语

我还做了个b站的弹幕发送,但是由于b站的设置,每发一次的时间就变长,只能发个几次而已

from selenium import webdriver
import time

def send_danmu(vedio_url,num):
    profile_url=r'C:\Users\yearEamab\AppData\Roaming\Mozilla\Firefox\Profiles\q95dlwy9.default'
    profile=webdriver.FirefoxProfile(profile_url)
    driver=webdriver.Firefox(profile)
    driver.implicitly_wait(5)
    time.sleep(5)
    driver.get(vedio_url)
    time.sleep(20)
    driver.implicitly_wait(10)
    frame=driver.find_element_by_xpath('//body/div[4]/div/div/div[2]/iframe')
    element=driver.find_element_by_class_name('v-title')
    print(element.text)
    driver.switch_to.frame(frame)
    # for x in range(0,num):
    #     #//body/div[4]/div/div/div[2]/iframe//html/body/div/div/div/div[4]/div[3]/input
    #     #//body/div[4]/div/div/div[2]/iframe//html/body/div/div/div/div[4]/div[3]/div[2]
    driver.find_element_by_xpath('//html/body/div/div/div/div[4]/div[3]/input').click()
    driver.find_element_by_xpath('//html/body/div/div/div/div[4]/div[3]/input').send_keys('这是弹幕')
    time.sleep(5)
    driver.find_element_by_xpath('//html/body/div/div/div/div[4]/div[3]/div[3]').click()
    #     time.sleep(10)
    driver.switch_to.default_content()

if __name__=="__main__":
    vedio_url=r'https://bangumi.bilibili.com/anime/6159/play#113891'
    num=10
    send_danmu(vedio_url,num)

做这个时遇到的问题就是b站的视频播放器放在iframe里,所以要先获取到iframe元素才行

frame=driver.find_element_by_xpath('//body/div[4]/div/div/div[2]/iframe')

driver.switch_to.frame(frame)#将工作空间转到iframe里

 

要记得转dirver回

driver.switch_to.default_content()

安装scrapy是出现了request visual c++ 14.0 于是我就去http://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud下了twiste的whl文件,安装成功,一开始时将获取的数据输出到外面时显示的是unicode编码,后面google了才找到答案在settings文件里加FEED_EXPORT_ENCODING='utf-8‘即可

scrapy startproject new_spider新建项目

scrapy crawl spider_name -o outputfile_name(可以是json,csv,xml)启动爬虫

scrapy runspider 也可以启动爬虫但是要到爬虫的目录下

with open('article.txt','wb') as f:
     f.write(response.body)
     f.close()
此时response.body返回的bytes的所以要用wb才行

with open('article_title.txt','a',encoding='utf-8') as f:
     f.write(one_article.css('.title a::text').extract()[0]+'    ')
     f.write(response.urljoin(one_article.css('.title a::attr(href)').extract()[0])+'\n')
     f.close()
此时用选择器返回的却是str所以用w或a

可以看到response.url是str而response.body是bytes,搞不懂,下面的是返回segmentfault的第一页的所有的文章和链接,response.urljoin()则会自动补齐url

# -*- coding: utf-8 -*-
import scrapy

class SegmentfaultSpiderSpider(scrapy.Spider):
    name = 'segmentfault_spider'
    allowed_domains = ['segmentfault.com']
    start_urls = ['http://segmentfault.com/']

    def parse(self, response):
        # with open('article.txt','wb') as f:
        #     f.write(response.body)
        #     f.close()
        article_list=response.css('.stream-list__item')
        for one_article in article_list:
            with open('article_title.txt','a',encoding='utf-8') as f:
                f.write(one_article.css('.title a::text').extract()[0]+'    ')
                f.write(response.urljoin(one_article.css('.title a::attr(href)').extract()[0])+'\n')
                f.close()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值