python爬虫学习记录

总体思路

思路

  1. 找出所有获奖者的豆瓣id

  2. 将获奖者豆瓣id顺序排列

  3. 对于表格内每一个数据逐行读取

  4. 进行豆瓣电影搜索,进入搜索页面,拉取导演和前三个演员id

  5. 在获奖者列表中二分法匹配

  6. 只要能匹配到一个,就标注1,停止匹配,4个id全都匹配过后,没有匹配的,标注0

  7. 读取下一行进行搜索,重复step4-6

内容

变量

变量名描述来源
mov_name电影名excel
mov_name_enUrlEncode电影名quote(name)
mov_id电影豆瓣id搜索后在页面处理
id_dir导演id电影页面处理
id_act1主演id1电影页面处理
id_act2主演id2电影页面处理
id_act3主演id3电影页面处理
mov_info电影数组: mov_name, mov_id, id_dir, id_act1, id_act2, id_act3, ismat存储电影名、id,导演和主演、是否匹配的数组
pri_id获奖影人id数组搜索获得
ismat是否匹配查看id是否在列表里

采集过程

豆瓣电影搜索

扬名立万 - 电影 - 豆瓣搜索

https://search.douban.com/movie/subject_search?search_text=[urlEncode:mov_name]

UrlEncode方法:

from urllib.parse import quote,unquote
quote('汉字')
unquote('百分号编码')

在搜索页面中找到第一个

%E7%83%AD%E5%A4%A9%E5%8D%88%E5%90%8E',subject_id:'
[mov_id]
&#39

电影页面

热天午后 (豆瓣)

https://movie.douban.com/subject/[mov_id]/

在页面中找到

  "director": 
  [
    {
      "@type": "Person",
      "url": "/celebrity/1320453/",
      "name": "刘循子墨 Xunzimo Liu"
    }
  ]
  "actor": 
  [
    {
      "@type": "Person",
      "url": "/celebrity/1332934/",
      "name": "尹正 Zheng Yin"
    }
    ,
    {
      "@type": "Person",
      "url": "/celebrity/1274361/",
      "name": "邓家佳 Jiajia Deng"
    }
    ,
    {
      "@type": "Person",
      "url": "/celebrity/1274271/",
      "name": "喻恩泰 Entai Yu"
    }

得到4个人物id

电影数组

将4个人物id组成一个电影数组mov_info[mov_name, mov_id, id_dir, id_act1, id_act2, id_act3, ismat=0 ]

分隔以后,存入csv01

比较过程

数据格式

csv01中获取电影,一行为一条电影记录mov_info[mov_name, mov_id, id_dir, id_act1, id_act2, id_act3, ismat=0 ]

csv02中获取获奖影人信息,pri_id

排序

将pri_id顺序排列

比较

对于每一行,读入数组mov_info [mov_name, mov_id, id_dir, id_act1, id_act2, id_act3, ismat=0 ]

for j in range(1,2001):
    mov_info = line[j] #读入第j行
    for i in range(2,5): #4大影人id
        if (mov_info[i] in pri_id ): #匹配影人id
            mov_info[6]=1 #ismat=1
            break #读入下一行
        else:
            continue #匹配下一个影人id

开始努力

问题1:等待时间

requests包不能进行打开网页并等待的操作,所以决定使用selenium包完成。

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()    
driver.get(url)
sleep(3)
element = driver.find_element_by_xpath("//body")

问题2:路径获得

用find_element_by_xpath获得元素,但是对于xpath的内容获取总有点问题,于是使用chopath插件完成xpath路径获取。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值