这是平常学python的第17篇原创文章python
上篇文章说了BeautifulSoup库以后,今篇文章就是利用上篇的知识来爬取咱们今天的主题网站:猫眼电影top100。这个网站也挺容易的,因此你们能够先本身爬取下,遇到问题再来看下这篇文章哈。git
这篇文章主要是练习而已,别无用处,大佬请绕道哈!github
一、本文用到的库及网站
正则表达式
requestsapp
BeautifulSouppython爬虫
目标网站:http://maoyan.com/board/4ide
二、分析目标网站网站
很容易找到咱们想要的信息,上面的5的箭头都是咱们想要的信息,分别是电影图片地址、电影名字、主演、上演时间和评分。内容有了,接下来就是获取下一页的连接。ui
这里有两种方法,第一种就是在首页获取全部页的连接,第二种方法就是获取每一个页面的下一页的连接。在这里因为只是给了部分页面的连接出来,因此咱们获取的是下一页的连接,这样子方便点。url
好了,分析完毕,接下来代码撸起。
3.敲代码
什么都无论,当即来个get请求
import requests
from bs4 import BeautifulSoup
url_start = 'http://maoyan.com/board/4'
response = requests.get(url_start)
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
print(response.text)
复制代码
输出结果:
惊不惊喜,意不意外?若是你常常玩爬虫的,这个就见怪不怪了,咱们被反爬了。咱们试下加个请求头试试。
url_start = 'http://maoyan.com/board/4'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'}
response = requests.get(url_start, headers=headers)
复制代码
这样就能够正常返回了,由于通常的网站都会在请求头上加个反爬的,因此遇到了反爬也不要着急,加个请求头试试?
接下来用BeautifulSoupL来获取内容
imgs = soup.select('dd .board-img') # 这是获取图片连接
titles = soup.select('dd .board-item-main .name') # 这是获取电影名字
starses = soup.select('dd .board-item-main .movie-item-info .star') # 这是获取电影主演
times = soup.select('dd .board-item-main .movie-item-info .releasetime') # 这是获取电影上映时间
scores = soup.select('dd .board-item-main .score-num') # 这是获取评分
复制代码
这里每一个获取的语句都包含了每一个不一样电影的信息,这样就不能和正则那样一次把每一个电影的信息都在同一个字符里面了。就好比我获取的图片,一个语句获取的是这个页面的全部电影图片的连接,咱们存储的时候就要分别取出来了。这里我用到的是for循环0到9把相同的坐标的信息存进同一个字典里面。
films = [] # 存储一个页面的全部电影信息
for x in range(0, 10):
# 这个是获取属性的连接
img = imgs[x]['data-src']
# 下面的都是获取标签的内容并去掉两端空格
title = titles[x].get_text().strip()
stars = starses[x].get_text().strip()[3:] # 使用切片是去掉主演二字
time = times[x].get_text().strip()[5:] # 使用切片是去掉上映时间二字
score = scores[x].get_text().strip()
film = {'title': title, 'img': img, 'stars': stars, 'time': time, 'score': score}
films.append(film)
复制代码
接下来就是获取每一页的连接
pages = soup.select('.list-pager li a') # 能够看到下一页的连接在最后一个a标签
page = pages[len(pages)-1]['href']
复制代码
后面的就简单了,就是利用循环把全部页面的内容都去取出来就能够了,代码就不贴出来了。
写在最后
这个就是BeautifulSoup库的小练习,用到昨天的内容很少,只是用到了选择器部分和获取文本内容和属性部分,感受仍是正则比较好用点哈,我一个正则就能够获取每一个电影的详细内容了,以下:
<dd>.*?board-index.*?>([\d]{1,3})</i>.*?title="(.*?)".*?class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>.*?class="integer">(.*?)</i>.*?class="fraction">(.*?)</i>
复制代码
还须要用到个匹配模式哈:re.S就能够了。因此本人推荐使用正则表达式哈。
须要完整代码的请查看个人github哈!
github:github.com/SergioJune/…
若是这篇文章对你有用,点个赞,转个发如何?
◐◑爬取《The Hitchhiker’s Guide to Python!》python进阶书并制成pdf
◐◑ python爬虫经常使用库之BeautifulSoup详解
平常学python
代码不止bug,还有美和乐趣