何谓“爬虫”,即抓取别人网页上面的数据,占为己有。爬虫运用及其广泛,比如x来了,爬取其他交通软件获取相关公交动态信息,得到何时到站,你自己还可以爬取某天气网站获取最新天气信息。
接下来我们开始进行爬取被人的网站数据吧。
https://www.dy2018.com/html/gndy/dyzz/index_2.html最新热门电影,网页数据图片如下:
军训演示
安装python环境就不提了,不懂的可以看我前面几章进行学习。
我们直接从代码出发:
# coding : UTF-8
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
try:
target = 'https://www.dy2018.com/html/gndy/dyzz/index.html' #定义访问的地址
req = requests.get(target)
# 处理中文乱码
html = req.content.decode('gbk','ignore')
bf = BeautifulSoup(html)
tables = bf.find_all('table',{'class':'tbspan'}) #查找class=tbspan的table
for table in tables:
movieName = table.find_all('tr')[1].text.strip() #查找到第一个元素并去掉空格
moveClickNum = table.find_all('tr')[2].text.strip() #查找到第二个元素并去掉空格
print(movieName," ",moveClickNum)
except Exception as e:
print(e) #输出异常
运行结果:
解释:
python爬取数据非常简单,你可以直接使用requests工具类进行获取数据,比如requests.get(target),就能拿到你所爬取的网页所有内容。
但拿到所有内容,其实还包括很多不需要用到的,比如html元素之类的,这时,我们又要借助BeautifulSoup这个工具类:bf = BeautifulSoup(html),创建成功后,直接使用bf.find_all或者bf.find进行过滤数据。
下面我来稍微提一下find_all和find它们两者的核心区别:
find_all拿到的其实相当于java中的集合,find拿到的是对象,对象可以直接.get_text(),但集合不行,还需定位都某一个对象,这就是他们的核心区别。
真枪实弹
如果你对上面爬取最新电影python代码没什么问题的话,我们继续把它升级改造一下:获取全部最新电影。
你应该发现,它只是第一页,我们现在要做的就是自动给它翻页,拿取直至最后一页的数据。
# coding : UTF-8
import requests
from bs4 import BeautifulSoup
class GetMaoYanTop100:
def getMoviesInfo(self,i):
target = 'https://www.dy2018.com/html/gndy/dyzz/index.html'
if i!=1:
target = 'https://www.dy2018.com/html/gndy/dyzz/index_'+i+'.html'
try:
target = 'https://www.dy2018.com/html/gndy/dyzz/index_3.html'
req = requests.get(target)
# 处理中文乱码
html = req.content.decode('gbk','ignore')
bf = BeautifulSoup(html)
tables = bf.find_all('table',{'class':'tbspan'})
for table in tables:
movieName = table.find_all('tr')[1].text.strip()
moveClickNum = table.find_all('tr')[2].text.strip()
print(movieName," ",moveClickNum)
except Exception as e:
print(e) #输出异常
if __name__ == '__main__':
object = GetMaoYanTop100()
i=1
while i<=300:
object.getMoviesInfo(i)
好了,下面的代码没写太多注释,大家可以复制手动运行一次,或者使用debugger进行逐步查看,有不懂的地方可以在下方留言,后面一章节我们继续python爬虫,更加高难度。
上一章,【python之操作mysql增删改查】
下一章,暂无
网友评论