静觅爬虫学习笔记8-爬取猫眼电影

  不知道是不是我学习太晚的原因,猫眼电影这网站我用requests进行爬取源码直接返回给我一个您的访问被禁止。作为萌新的我登时就傻了,还好认真听了之前的课,直接换selenium抓了源码,虽然效率惨不忍睹,但多少也能运行了,下面上代码

import json
import requests
import re
from requests.exceptions import RequestException
from multiprocessing import Pool
from selenium import webdriver


def get_one_page(url):                  # 获取网页源码
    browser = webdriver.Chrome()
    try:
        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{
            '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('result.txt','a',encoding='utf-8') as f:
        f.write(json.dumps(content,ensure_ascii=False) + '\n')
        f.close()


def main(offset):
    url="http://maoyan.com/board/4?offset=" + str(offset)
    html = get_one_page(url)
    for item in parse_one_page(html):
        print(item)
        write_to_file(item)


if __name__ == '__main__':
    for i in range(10):
        main(i*10)
    #多线程写法,实测不是很好用,因为同时打开多个网页,抓取结果容易乱序
    """
    pool = Pool()
    pool.map(main,[i*10 for i in range(10)])
    """

多线程那块这写法不太好用....

而且有的时候爬取的数据不足100个,会漏掉1到2个,而且每次漏掉的还是不同的数据,萌新求教这是为何

posted @ 2017-12-04 15:09  Eastruo  阅读(1392)  评论(1编辑  收藏  举报