|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
各位大佬好,小可剛開始學習定向爬蟲,嘗試爬取豆瓣熱播電影,代碼如下:
- from bs4 import BeautifulSoup
- import requests
- url = requests.get('https://movie.douban.com/')
- demo = url.text
- soup = BeautifulSoup(demo,'html.parser')
- for link in soup.find_all('li'):
- movie_name = link.get('data-title')
- movie_actor = link.get('data-actors')
- movie_rate = link.get('data-rate')
- if movie_name != None and movie_actor!=None and movie_rate != None:
- print('電影名:{:^10}\t演員:{:^6}\t評分:{:^10}'.format(movie_name,movie_actor,movie_rate))
复制代码
運行發現問題,即在返囘值中存在很多的None,這是怎麽一回事?
純自學,感覺爬蟲非常不容易,同時現存在以下問題:
1.懇請大佬們對小可爬蟲的學習指點一二,如何學習爬蟲?
2.如何能夠迅速的獲取想要的標簽内容?
本帖最后由 ooxx7788 于 2017-4-22 00:48 编辑
- import requests
- from bs4 import BeautifulSoup
- url = 'https://movie.douban.com/tag/%E7%88%B1%E6%83%85'
- r = requests.get(url).content
- soup = BeautifulSoup(r, 'lxml')
- for each in soup.find_all('table', attrs={'width': '100%', 'class': ''}):
- print(each.a.get('href')) # 对应页面链接,可以为进一步爬取详细内容做准备。
- print(each.p.text) # 播放地区、演员、时间等信息,此处分类不明确,如果需要详细分类,可以上个链接的详细分类。
- print('星数:', int(each.find_all('span')[-3].attrs.get('class')[0][-2:]) / 10)
- print('评价人数:', str(each.find_all('span')[-1].text).strip('()'))
- print('评分:', each.find('span', attrs='rating_nums').text)
复制代码
对于绝大多数网页来说,其实Beautiful soup很好用,当然前提是要对Beautiful soup比较熟悉。不需要写上一堆让人看不懂的正则表达式。
而其实这里基本上已经把爬取豆瓣所有电影的主要代码写完了,只需要能够遍历所有标签,就可以爬取全站电影信息了。
当然我这里没有做异常处理,里面拾取的标签中,其实有部分新上映或者未上映的电影是没有评分这个标签的,这种就需要根据情况处理了。不过这里就不太多展开了。可以自己考虑考虑。
哎哟,刚刚仔细看了看,电影名字没有获取,不过这也不是重点了,算留给你自己解决的问题吧。
输出(部分显示):
- https://movie.douban.com/subject/25900945/
- 2017-03-17(中国大陆/美国) / 艾玛·沃森 / 丹·史蒂文斯 / 卢克·伊万斯 / 凯文·克莱恩 / 乔什·加德 / 伊万·麦克格雷格 / 伊恩·麦克莱恩 / 艾玛·汤普森 / 斯坦利·图齐 / 古古·姆巴塔-劳 / 奥德拉·麦克唐纳 / 内森·麦克 / 哈蒂·莫拉汉...
- 星数: 4.0
- 评价人数: 110124人评价
- 评分: 7.4
复制代码
|
|