萌新的Python学习日记 - 爬虫无影 - 使用BeautifulSoup + css selector 抓取自己想要网页内容

博客第一天

测试页面:

★豆瓣高分电影榜★ (上)9.7-8.6分:https://www.douban.com/doulist/240962/,

目的:抓取该页面中每部电影的名称,图片链接,剧组信息,简介,评语


工程内容:Python3.5,jupyter notebook

工具包:urllib.request,BeautifulSoup

代码(单页内容):

from bs4 import BeautifulSoup as bs
import urllib.request as urlrequest
url = 'https://www.douban.com/doulist/240962/'
page = urlrequest.urlopen(url).read()
soup = bs(page,'lxml')
#                     #item1931154 > div > div.bd.doulist-subject > div.title > a
#                     #item1931153 > div > div.bd.doulist-subject > div.title > a
#                     #item1931152 > div > div.bd.doulist-subject > div.title > a
#                     #item1931131 > div > div.bd.doulist-subject > div.title > a,   此处为分析用的css selector内容,
a = 1931155    #第一部电影关键编号
info = []          #创建空的info数组存储爬取内容
for i in range(25):                                       #每页有25部电影,设定i以便获取每部电影信息,i范围是0-24
    titles = soup.select('#item{} > div > div.bd.doulist-subject > div.title > a'.format(a-i))                  #名称
    images = soup.select('#item{} > div > div.bd.doulist-subject > div.post > a > img'.format(a-i))   #图片
    rates = soup.select('#item{} > div > div.bd.doulist-subject > div.rating > span.rating_nums'.format(a-i))   #评分
    descs = soup.select('#item{} > div > div.bd.doulist-subject > div.abstract'.format(a-i))                 #剧组信息
    comments = soup.select('#item{} > div > div.ft > div.comment-item.content > blockquote'.format(a-i))   #评语
    i = i - 1         
   # print(rates)
    for title,image,rate,desc,comment in zip(titles,images,rates,descs,comments):
        data = {
            'title' : title.get_text(),
            'image' : image.get('src'),
            'rate' : rate.get_text(),
            'desc' : list(desc.stripped_strings),
            'comment' : comment.get_text()
        }
        info.append(data)
print(info)          #检查输出是否正确
import pandas   #导入pandas以便输出info到csv文件
df = pandas.DataFrame(info)          #用DataFrame方法处理info

df.to_csv('douban_test2.csv')           #输出到文件

print输出内容(部分):


csv截图(部分):


error内容:25部电影中有一部不能访问,只能获取部分信息,所以没有出现在print结果以及csv文件中

error相关:

总结:

    1. print及csv各项的顺序于data中设定的顺序不一样,此处疑问待解决

    2. 代码应该可以更简单

    3. 可在此代码基础上改进:爬取整个榜单内容(经测试,榜单的编排规则在11页中部会发生变化,时间有限,未爬取全部榜单,仅获取229部)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值