利用BeautifulSoup爬取标题
整体思想:
- 首先导入所需要的库
- 声明一个方法 ,将过程包裹起来
- 获取网页
- 解析网页,找到我们所需要的东西
- 保存内容
1.获取随机头部的库方法
from fake_useragent import UserAgent
headers = {'User-Agent':UserAgent().random}
headers
每次返回的头部都是不一样的。
2.采用request来获取网页
import requests
from fake_useragent import UserAgent
headers = {'User-Agent':UserAgent().random}
link="https://movie.douban.com/top250"
r=requests.get(link,headers=headers,timeout=10)
r.text
3.用BeautifulSoup来解析网页,提取想要的标签
当我们查看网页源代码的时候可以发现,我们想要找的电影标题在《div》里面(class=“hd”),下面的《a》里面,最后在《span》里面。
所以可以这样获取内容:
soup=BeautifulSoup(r.text,"lxml")
div_list=soup.find_all("div",class_="hd")
title = div_list.a.span.text
4.保存内容
可以采用创建文件,将内容写入的方式。
如下:
with open("a.txt",'w') as f:
for i in mi:
f.write(i)
整体代码
#coding:utf-8
import requests
from bs4 import BeautifulSoup
from fake_useragent import UserAgent#随机头部库
def get_m():#声明一个方法
headers = {'User-Agent':UserAgent().random}
movie_list=[]
for i in range(0,10):#爬取十页,也可以更多
link= 'https://movie.douban.com/top250?start={}&filter='.format(i*25)
#设置超时,如果超过设置的时间,单位 秒
r=requests.get(link,headers=headers,timeout=10)
#print(r.status_code) #如果有输出,状态值,说明爬到了信息
#print(r.text)
#还要进一步,爬取标题
soup=BeautifulSoup(r.text,"lxml")
#因为会取到很多,放到集合
div_list=soup.find_all("div",class_="hd")
for each in div_list:# 把div_list 遍历成每个each
#要进一步取到a标签下的span
movie=each.a.span.text
movie_list.append(movie)
#print(div_list)
return movie_list
mi=get_m()#调用方法
print(mi)
#保存内容
with open("a.txt",'w') as f:
for i in mi:
f.write(i)
爬取完成!
BeautifulSoup:爬取数据的规则
- 标签:html中的<,b也叫元素
- 爬标签 soup.div 爬取了div标签的内容,所有的div
- soup.div.text 爬到了标签的内容
- 《div》xx《/div》
- soup.div.span 通过.来区别级别
- 爬到了div下的span元素
- soup find 一般用于爬第一个
- soup find_all 爬很多的
- id=”xx” 爬id名为xx区域
- 从lass_=”xx” 爬class名为xx区域