鱼C论坛

 找回密码
 立即注册
查看: 868|回复: 4

[已解决]爬虫

[复制链接]
发表于 2021-7-24 18:53:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 kygschp 于 2021-7-24 19:39 编辑

https://movie.douban.com/typeran ... =100:90&action=
想要爬取豆瓣排行榜上电影的名字

但是下面的这段代码貌似有点问题,targets那里获得不了东西,打印出来是个空列表,请问下各位大佬是什么原因导致的?

def find_movies(soup):
    movie_names = []
    targets = soup.find_all('div', class_="movie_name")
    print(targets)
    for each in targets:
        movie_name = each.span.a.text
        print(movie_name)
        movie_names.append(movie_name)



完整代码如下

import requests
import bs4

def open_url(url):
    header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'}
    response = requests.get(url, headers=header)
   
    return response

def find_movies(soup):
    movie_names = []
    targets = soup.find_all('div', class_="movie_name")
    print(targets)
    for each in targets:
        movie_name = each.span.a.text
        print(movie_name)
        movie_names.append(movie_name)
        
    movie_shorts = []
    targets = soup.find_all('div', class_='movie-misc')
    for each in targets:
        movie_short = each.text
        movie_shorts.append(movie_short)
        
    movie_infos = []
    length = len(movie_names)
    for i in range(length):
        movie_infos.append(movie_names[i]+movie_shorts[i]+'\n')
        
    return movie_infos

def save(movie_infos):
    file = r'D:\python\movies.txt'
    with open(file, 'w') as f:
        for each in movie_infos:
            f.write(each)

def main():
    url = 'https://movie.douban.com/typerank?type_name=%E6%82%AC%E7%96%91&type=10&interval_id=100:90&action='
    response = open_url(url)
    soup = bs4.BeautifulSoup(response.text, 'html.parser')
    movie_infos = find_movies(soup)
    save(movie_infos)
   
if __name__ == '__main__':
    main()
最佳答案
2021-7-25 10:48:58
本帖最后由 suchocolate 于 2021-7-25 10:50 编辑

你的这个url和其他 top250之类的榜单不同,这个url的页面的数据是通过ajax加载的。 Screenshot 2021-07-25 102210.jpg
url不同,代码改成:
import requests


def main():
    f = open('result.txt', 'w', encoding='utf-8')
    headers = {'user-agent': 'firefox'}
    for n in range(10):
        url = f'https://movie.douban.com/j/chart/top_list?type=10&interval_id=100%3A90&action=&start={n}&limit=20'
        r = requests.get(url, headers=headers)
        for item in r.json():
            print(item['title'], item['types'])
            f.write(f'{item["title"]} {item["types"]}\n')
    f.close()


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-25 10:48:58 | 显示全部楼层    本楼为最佳答案   
本帖最后由 suchocolate 于 2021-7-25 10:50 编辑

你的这个url和其他 top250之类的榜单不同,这个url的页面的数据是通过ajax加载的。 Screenshot 2021-07-25 102210.jpg
url不同,代码改成:
import requests


def main():
    f = open('result.txt', 'w', encoding='utf-8')
    headers = {'user-agent': 'firefox'}
    for n in range(10):
        url = f'https://movie.douban.com/j/chart/top_list?type=10&interval_id=100%3A90&action=&start={n}&limit=20'
        r = requests.get(url, headers=headers)
        for item in r.json():
            print(item['title'], item['types'])
            f.write(f'{item["title"]} {item["types"]}\n')
    f.close()


if __name__ == '__main__':
    main()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-25 11:34:18 | 显示全部楼层
本帖最后由 kygschp 于 2021-7-25 11:41 编辑
suchocolate 发表于 2021-7-25 10:48
你的这个url和其他 top250之类的榜单不同,这个url的页面的数据是通过ajax加载的。
url不同,代码改成:


感谢大佬,想知道url前面的那个f是什么意思,刚学还没接触过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-25 12:07:17 | 显示全部楼层
kygschp 发表于 2021-7-25 11:34
感谢大佬,想知道url前面的那个f是什么意思,刚学还没接触过

额,已经明白了,感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-25 20:02:41 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 00:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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