Re+Selenium新手爬取猫眼Top 100

看完了视频后,照猫画虎的把源码写了,有不懂的地方做了注释,以后还是把知识点或者难的地方写在博客上,也方便查询一些,上次的.format运算当时记得住现在就忘了,结果在写进程池之前只能用最弱智的for循环。。。
对于源代码的爬取,猫眼有最初级的反爬取措施,所以无法直接用request来进行解析,所以用了之前看到的selenium库来得到源码,其实这些用美丽汤很好写,但是也算是练习Re了。
下面是代码

from selenium import  webdriver#引入浏览器对象
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver import ActionChains#交互动作,如拖拽
import time
from multiprocessing import Pool
import re
import json

def get_one_page(url):#得到网页源代码
    try:
        browser = webdriver.Chrome("C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe")
        browser.get(url)
        return browser.page_source
    finally:
        browser.close()

def parse_one_page(html):
    pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i>.*?data-src="(.*?)".*?name"><a'
                        +'.*?>(.*?)</a>.*?star">(.*?)</p>.*?releasetime">(.*?)</p>'
                        +'.*?integer">(.*?)</i>.*?fraction">(.*?)</i>.*?</dd>',re.S)#匹配正则表达式
    items=re.findall(pattern,html)
    for item in items:#yield的用法,函数生成器的用法
        yield{
            'index':item[0],
            'image':item[1],
            'title':item[2],
            'actor':item[3].strip()[3:],#去除空格
            'time':item[4].strip()[5:],
            'score':item[5]+item[6]
        }

def write_to_file(content):
    with open('C:/Users/张启航/Desktop/res.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False)+'\n')# dumps是将字典(dict)格式转化成字符串(str)格式
        f.close()


def main(offset):#对单个给定offset的网页进行读取
        url = 'http://maoyan.com/board/4?offset='+str(offset)
        print(url)#测试网址输出是否正确
        the_source=get_one_page(url)
        for item in parse_one_page(the_source):
            write_to_file(item)

if __name__=='__main__':
    pool=Pool()#引入进程池,加快程序
    pool.map(main,[i*10 for i in range(10)])

主要有几个部分,因为python是大一学的,而且学的很水,所以不扎实,比如.format和yield(函数生成器),另外json之前也没接触过。写完这篇之后,我会把这三个点重新写一下,当作积累。在学习爬虫之余顺便把python有意思的地方再来一遍。

猜你喜欢

转载自blog.csdn.net/qq_38284204/article/details/78714810
今日推荐