• 静觅爬虫学习笔记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) + '
    ')
            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个,而且每次漏掉的还是不同的数据,萌新求教这是为何

  • 相关阅读:
    一个封装好的CSV文件操作C#类代码
    C#导出GridView数据到Excel文件类
    JQ获取选中select 标签的值
    JQ替换标签与内容
    layerUi与AJAX的一种思路
    .NET MVC同页面显示从不同数据库(mssql、mysql)的数据
    MVC Html辅助方法DropDownList的简单使用、连接MYSQL数据库用自定义model类接收
    EF中GroupBy扩展方法的简单使用
    sqlserver操作命令
    发送短信验证码及调用短信接口与C# 后台 post 发送
  • 原文地址:https://www.cnblogs.com/xinzhiyan/p/7977135.html
Copyright © 2020-2023  润新知