吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1947|回复: 13
收起左侧

[讨论] 豆瓣排行榜ajax爬取 看视频都懂 一上手就各种问题 建议小白新手还是多练光看不...

[复制链接]
lihu5841314 发表于 2021-6-13 21:53
[Asm] 纯文本查看 复制代码
import requests
import pymongo
from  multiprocessing.dummy import Pool
from db_phb import *
from lxml import etree


"""
url = https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=
1.请求首页url 从response中找到详情页url
2.对详情页发送请求,从response中解析出电影标题  评分 简介
3.首页翻页请求 分析ajax动态加载 获得翻页的url
4.储存 
    存到mangodb

"""


def  get_moive_index(url,data):
        try:
            response = requests.get(url=url,headers=headers,params=data)
            if response.status_code == 200:
                  return   response.json()
        except Exception:
            pass

def detail_mov(url):
    try:
        response = requests.get(url=url,headers=headers)
        if response.status_code == 200:
              return  response.text
    except Exception:
        pass

#解析电影简介
def info(url):
    rep = detail_mov(url)
    tree = etree.HTML(rep)
    try:
        mov_info = tree.xpath('//div[[url=home.php?mod=space&uid=341152]@Class[/url] ="indent"]//span/text()')
        mov_info = "".join([x.strip() for x in mov_info])
        # mov_info = str(mov_info)
        # mov_info = mov_info.replace("\\u3000","").replace("\\n","").replace(" ","").replace("[","").replace("]","") #和上面那个推导式效果差不多
        # print(mov_info)
        return  mov_info
    except:
        pass

def save_to_mongo(item):
    if db[MONGO_TABLE].insert(item):
       print("储存到mongodb成功",item)
       return  True
    return  False


def  main(data):
    print(("多进程启动成功"))
    respons= get_moive_index(url,data)
    for dic in  respons:
         item = {}
         ur = dic['url']
         item['title'] = dic['title']
         item['regions'] = dic['regions']
         item['score'] = dic['score']
         item['vote_count'] = dic['vote_count']
         item['mov_info'] = info(ur)
         print(item)
         save_to_mongo(item)


if __name__ == '__main__':
    clint = pymongo.MongoClient(MONGODB_URL)
    db = clint[MONGO_DB]
    url = "https://movie.douban.com/j/chart/top_list?"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
    }
    datas = []
    for x in range(START, END + 1):
        data = {
            "type": "11",
            "interval_id": "100:90",
            "action": "",
            "start": x * 20,
            "limit": "20"
        }
        datas.append(data)
    pool = Pool(4)
    pool.map(main,datas)
    pool.close()
    pool.join()
    clint.close()

免费评分

参与人数 3吾爱币 +3 热心值 +2 收起 理由
painstaking1 + 1 + 1 谢谢@Thanks!
wu-ai-po-jie + 1 用心讨论,共获提升!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

bigcan 发表于 2021-6-13 23:04
个人不熟悉python,但。。。ajax是在浏览器端用的,python后端用的并不是ajax技术吧
沉迷凡间的天使 发表于 2021-6-13 23:13
bigcan 发表于 2021-6-13 23:04
个人不熟悉python,但。。。ajax是在浏览器端用的,python后端用的并不是ajax技术吧

他说的是豆瓣使用的是AJAX,然后通过python爬取它
ablajan 发表于 2021-6-13 23:35
我也刚刚开始学,看你的代码逻辑都对呀,能编出这个我觉得你已经不是小白了。
 楼主| lihu5841314 发表于 2021-6-13 23:57
ablajan 发表于 2021-6-13 23:35
我也刚刚开始学,看你的代码逻辑都对呀,能编出这个我觉得你已经不是小白了。

自己瞎折腾2个月了  啥都看  啥都不精
 楼主| lihu5841314 发表于 2021-6-13 23:58
lihu5841314 发表于 2021-6-13 23:57
自己瞎折腾2个月了  啥都看  啥都不精

一般只要不是加密的还是爬的下来的   就是写的不流畅
 楼主| lihu5841314 发表于 2021-6-14 00:00
lihu5841314 发表于 2021-6-13 23:58
一般只要不是加密的还是爬的下来的   就是写的不流畅

反正我感觉我只要坚持学个一两年  我就是头猪也该成精了
君临天下001 发表于 2021-6-14 07:03
小白来学习学习,这个网站我感觉两个库就行了呀,还有就是代码写的不太好看。
启动main下面那么多代码,
wodeshijie123 发表于 2021-6-14 08:08
对于没底子的小白来说还是好难哦
QingYi. 发表于 2021-6-14 09:34
你这标题写的  我个人理解为用ajax来爬取内容
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表