打开F12/右键检查第一个电影,分析源码先,发现每个
标签就对应着一个电影的信息。
我们来爬取每部电影的图片,名称,导演演员,类型,评分,和它的一句话总结,继续对
标签进行分析,又发现信息又在
标签里,而这标签只存在于
标签中,其它地方不存在,这样可以用find_all()方法把他们全部分离出来。这里不选择
标签是它没有唯一性,电影以外的内容也有
标签。
布置好伪装后就可一开始根据每个
标签进行信息筛选了:
图片链接是
的上上个兄弟标签
的孙子的src属性的值
电影名有多个,都在
标签里,用get_text()把它们串起来
导演演员是
标签的第一段字符串
类型是
标签的第二段字符串
评分和评分人数都在
标签里,又用get_text()串起来
一句话总结直属于标签
html中的&NBSP(实际上是小写,这里大写避免markdown识别)对应字符串中的\xa0,可用replace方法替换掉
但是这样只有25部电影啊,是的,'https://movie.douban.com/top250'指向第一页,我们现在只爬了一页,其实还有9页还没爬啊,这是就要构造网址了。
我们点到第二页,发现网址变成了https://movie.douban.com/top2...,第三页start条件值变成50,我们可以得出结论,每下一页,start条件值就加25。第一页start=0,第二页start=25.....第十页start=225。这样就可以循环构造网页并爬取了,这交给读者实现
下面笔者提供另一种思路:网页不是有下一页的按钮吗,右键检查一下,发现它已经包含了要构造的部分了,是一个属性值,提取出来接到原网址上即得到下一页的网址,这样能完全爬取所有页数,不用像上面一样设置循环次数。
贴上完整代码
本实例的筛选方法已经讲的很细致了,几乎提及了BeautifulSoup的所有方法,希望大家能通过此实例能加深对BeautifulSoup的理解,然后自己手打一些爬虫出来,小的十几行多的几十行都可以,爬贴吧什么的都可以。