python+selenium+unittest,爬虫电影网站

    以前经常在这个网站上下载电影下来看,这个网站比较坑的就是,主页上只有电影的名称,但是评分是看不到的;只有再点击电影名字,进入电影主页时才能看到评分。一般下载的电影都是评分高的才看,低的就忽略掉了。每次都要来回去看评分,太麻烦了。So,我就写了一个小小的爬虫,暂时就叫爬虫好了。

    在脚本中使用的是:python2.7 + selenium + unittest + chrome(其实我想用phantomjs的,但是在抓取评分的时候,老是抓取不到,好像是js搞的鬼)

  其实流程很简单:1、进入主页获取电影的title和url,2、根据获取的url,获取该电影的评分score,3、保存结果到本地文件中

  1、进入主页获取电影的title和url

  

  2、根据获取的url,获取该电影的评分score

  

   下面我就逐步分解:

   首先,进入该网站的主页,利用webdriver来定位电影,然后获取所有电影的属性:title,url,使用的定位是css

   

 1 def geturl(self): # 该函数是获取首页的电影的  title 和 url
 2         self.dr.get('http://www.xiamp4.com') # 网站首页
 3         urls = [] # 存放结果的list
 4         eles = self.dr.find_elements_by_css_selector('div.box.newbox ul.img-list.dis.clearfix b a') # 定位满足条件的所有电影,css定位
 5         for ele in eles:
 6             tmp = dict()
 7             url = ele.get_attribute('href') # 获取电影的url
 8             title = ele.get_attribute('title') # 获取电影的title
 9             tmp['url'] = url
10             tmp['title'] = title 
11             urls.append(tmp) # 将电影的title和url放在一个字典中,然后添加到 urls中
12         return urls

  2、根据获取的url,获取该电影的评分score

  

  

1     def getscore(self, url):
2         # url = 'http://www.xiamp4.com/Html/GP23161.html'
3         self.dr.get(url) # 进入电影的页面
4         time.sleep(2)
5         ele = self.dr.find_element_by_css_selector('input#MARK_B2') # 定位评分的元素
6         score = ele.get_attribute('value') # 获取元素value的值
7         # print score
8         return score    # 该函数的左右就是 根据参数电影的url,返回该电影的评分

  下面是最终的代码:

 1 #coding=utf-8
 2 
 3 from selenium import webdriver
 4 import unittest
 5 import time
 6 
 7 class Spider(unittest.TestCase):
 8     def setUp(self):
 9         print '####################### Start #######################'
10         self.dr = webdriver.Chrome()
11         self.dr.implicitly_wait(10)
12 
13 
14     def tearDown(self):
15         self.dr.close()
16         print '####################### End   #######################'
17 
18     def geturl(self):
19         self.dr.get('http://www.xiamp4.com')
20         urls = []
21         eles = self.dr.find_elements_by_css_selector('div.box.newbox ul.img-list.dis.clearfix b a')
22         for ele in eles:
23             tmp = dict()
24             url = ele.get_attribute('href')
25             title = ele.get_attribute('title')
26             tmp['url'] = url
27             tmp['title'] = title
28             urls.append(tmp)
29         return urls
30 
31     def getscore(self, url):
32         # url = 'http://www.xiamp4.com/Html/GP23161.html'
33         self.dr.get(url)
34         time.sleep(2)
35         ele = self.dr.find_element_by_css_selector('input#MARK_B2')
36         score = ele.get_attribute('value')
37         # print score
38         return score
39 
40     def test_run(self):
41         moves = self.geturl()
42         # print len(moves)
43         for move in moves:
44             move['score'] = self.getscore(move['url'])
45         try:
46             if len(moves) > 0:
47                 with open('MoveMessage.txt', 'a') as f:
48                         f.write('####################### Start #######################' + '\n')
49                 for move in moves:
50                     tmp = 'MoveName: %s\t,MoveScore: %s\t,MoveUrl: %s' % (move['title'],move['score'],move['url'])
51                     print tmp
52                     with open('MoveMessage.txt', 'a') as f:
53                         f.write(tmp.encode('utf-8') + '\n')
54                 with open('MoveMessage.txt', 'a') as f:
55                         f.write('#######################  End  #######################' + '\n')
56         except Exception,e:
57             print 'Not found moves!',e
63 
64 if __name__ == '__main__':
65     unittest.main()

    运行的最终结果:

  

 

转载于:https://www.cnblogs.com/xiaoshitoutest/p/5679413.html

selenium是一个web的自动化测试工具,通过使用浏览器访问目标站点而对一个页面上的各个控件进行操作,比如输入框输入内容,点击按钮,刷新页面,选择单选框和复选框等等操作。它能够很好地实现用工具模拟人的操作对访问进行自动化测试。在软件测试中,selenium可以完成自动化测试的任务。它也可以在爬虫中使用,通过驱动浏览器对页面进行操作,比如跳转、输入、点击、下拉等,从而获取页面上的有用信息。unittestPython中的一个单元测试框架,可以用来编写和运行测试用例。通过结合seleniumunittest,我们可以编写自动化测试脚本,对网站进行全面的功能测试和回归测试。这样可以提高测试效率,减少人工测试的工作量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [webUI自动化之基本框架搭建(python + selenium + unittest)](https://blog.csdn.net/m0_67695717/article/details/125502224)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [自动化测试Selenium8种元素定位+unittest框架设计](https://blog.csdn.net/AI_Green/article/details/119939916)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值