当前位置: 首页 > 科技观察

Python使用Beautifulsoup爬取笑话网站

时间:2023-03-12 19:38:02 科技观察

使用Beautifulsoup爬取知名笑话网站首先我们来看一下需要爬取的网站:http://xiaohua.zol.com.cn/1。1.1python3开始前的准备工作,本文博客内容是用python3编写的。如果电脑没有安装python3,请先安装python3.1.2Request库。urllib的升级版本打包了所有功能并简化了使用。下载方式:pipinstallrequests1.3Beautifulsoup库是一个Python库,可以从HTML或XML文件中提取数据。它可以通过您喜欢的转换器实现常用的文档导航、搜索和修改文档的方法。下载方式:pipinstallbeautifulsoup41.4LXML,用于辅助Beautifulsoup库解析网页。(如果你不使用anaconda,你会发现这个包在Windows下安装pip时报错)下载方法:pipinstallllxml1.5pycharm,一个强大的pythonIDE工具。下载正式版后,免费使用licenseserver(同系列产品类似),详见http://www.cnblogs.com/hanggegege/p/6763329.html。2.爬取过程演示分析frombs4importBeautifulSoupimportosimportrequests导入需要的库,os库用于后面存放爬取的内容。然后我们点击“***笑话”,发现有一栏是“所有笑话”,可以让我们最高效的爬取所有历史笑话!我们通过requests库看一下这个页面的源码:frombs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}all_html=requests.get(all_url,headers=headers)print(all_html.text)header是请求标头。大多数没有此请求标头的网站将无法抓取。部分效果如下:通过源码分析,我们还是不能通过本站直接获取所有的笑话信息,所以我们在这个页面寻找一些间接的方法。点击笑话查看全文,发现网址已经变成了http://xiaohua.zol.com.cn/detail58/57681.html。点开其他笑话后,发现网址都是http://xiaohua.zol.com.cn/detail?/?.html格式,我们以此为突破口,爬取所有内容。我们的目的是找到http://xiaohua.zol.com.cn/detail?/?.html这样的所有内容,然后爬取它的内容。我们在“所有笑话”页面随机翻到一个页面:http://xiaohua.zol.com.cn/new/5.html,按F12查看其源代码,根据其排版找出:每一个笑话对应其中一个

  • 标签,每个笑话全文的URL解析隐藏在href中,我们只需要获取href就可以从bs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/'headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}all_html=requests.get(all_url,headers=headers)#print(all_html.text)soup1=BeautifulSoup(all_html.text,'lxml')list1=soup1.find_all('li',class_='article-summary')foriinlist1:#print(i)soup2=BeautifulSoup(i.prettify(),'lxml')list2=soup2.find_all('a',target='_blank',class_='all-read')forbinlist2:href=b['href']print(href)我们通过上面的代码成功获取了第一页所有笑话的URL后缀:也就是说我们只需要获取所有the循环遍历所有页码得到所有笑话。上面的代码优化后:frombs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/5.html'defGethref(url):headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}html=requests.get(url,headers=headers)soup_first=BeautifulSoup(html.text,'lxml')list_first=soup_first.find_all('li',class_='article-summary')foriinlist_first:soup_second=BeautifulSoup(i.prettify(),'lxml')list_second=soup_second.find_all('a',target='_blank',class_='all-read')forbinlist_second:href=b['href']print(href)Gethref(all_url)使用如下代码,获取完整的笑话地址urlfrombs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/5.html'defGethref(url):list_href=[]headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}html=requests.get(url,headers=headers)soup_first=BeautifulSoup(html.text,'lxml')list_first=soup_first.find_all('li',class_='article-summary')foriinlist_first:soup_second=BeautifulSoup(i.prettify(),'lxml')list_second=soup_second.find_all('a',target='_blank',class_='all-read')forbinlist_second:href=b['href']list_href.append(href)returnlist_hrefdefGetTrueUrl(liebiao):foriinliebiao:url='http://xiaohua.zol.com.cn'+str(i)print(url)GetTrueUrl(Gethref(all_url))简单分析完笑话页面的html内容,接下来就是获取一个页面所有笑话的内容:frombs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/5.html'defGethref(url):list_href=[]headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}html=requests.get(url,headers=headers)soup_first=BeautifulSoup(html.text,'lxml')list_first=soup_first.find_all('li',class_='article-summary')foriinlist_first:soup_second=BeautifulSoup(i.prettify(),'lxml')list_second=soup_second.find_all('a',target='_blank',class_='all-read')forbinlist_second:href=b['href']list_href.append(href)returnlist_hrefdefGetTrueUrl(liebiao):list=[]foriinliebiao:url='http://xiaohua.zol.com.cn'+str(i)list.append(url)returnlistdefGetText(url):foriinurl:html=requests.get(i)soup=BeautifulSoup(html.text,'lxml')content=soup.find('div',class_='article-text')print(content.text)GetText(GetTrueUrl(Gethref(all_url)))效果图如下:现在我们开始存储笑话的内容!我们需要借助os库使用下面的代码来获取一页笑话的所有内容!frombs4importBeautifulSoupimportosimportrequestsall_url='http://xiaohua.zol.com.cn/new/5.html'os.mkdir('/home/lei/zol')defGethref(url):list_href=[]headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}html=requests.get(url,headers=headers)soup_first=BeautifulSoup(html.text,'lxml')list_first=soup_first.find_all('li',class_='article-summary')foriinlist_first:soup_second=BeautifulSoup(i.prettify(),'lxml')list_second=soup_second.find_all('a',target='_blank',class_='all-read')forbinlist_second:href=b['href']list_href.append(href)returnlist_hrefdefGetTrueUrl(liebiao):list=[]foriinliebiao:url='http://xiaohua.zol.com.cn'+str(i)list.append(url)returnlistdefGetText(url):foriinurl:html=requests.get(i)soup=BeautifulSoup(html.text,'lxml')content=soup.find('div',class_='article-text')title=soup.find('h1',class_='article-title')SaveText(title.text,content.text)defSaveText(TextTitle,text):os.chdir('/home/lei/zol/')f=open(str(TextTitle)+'txt','w')f.write(text)f.close()GetText(GetTrueUrl(Gethref(all_url)))渲染:(因为我的系统是linux系统,请根据自己的电脑更改路径)我们的目标不是抓取一个页面笑话就是这么简单,接下来我们要做的就是遍历需要的页面了!通过观察,我们可以得到所有的笑话页面url为http://xiaohua.zol.com.cn/new/+页码+html,接下来我们遍历前100页的所有笑话,全部下载!接下来,我们再次修改代码:frombs4importBeautifulSoupimportosimportrequestsnum=1url='http://xiaohua.zol.com.cn/new/'+str(num)+'.html'os.mkdir('/home/lei/zol')defGethref(url):list_href=[]headers={'User-Agent':"Mozilla/5.0(WindowsNT6.1;WOW64)AppleWebKit/537.1(KHTML,likeGecko)Chrome/22.0.1207.1Safari/537.1"}html=请求.get(网址,headers=headers)soup_first=BeautifulSoup(html.text,'lxml')list_first=soup_first.find_all('li',class_='article-summary')foriinlist_first:soup_second=BeautifulSoup(i.prettify(),'lxml')list_second=soup_second.find_all('a',target='_blank',class_='all-read')forbinlist_second:href=b['href']list_href.append(href)returnlist_hrefdefGetTrueUrl(liebiao):list=[]foriinliebiao:url='http://xiaohua.zol.com.cn'+str(i)list.append(url)returnlistdefGetText(url):foriinurl:html=requests.get(i)soup=BeautifulSoup(html.text,'lxml')content=soup.find('div',class_='article-text')title=soup.find('h1',class_='article-title')SaveText(title.text,content.text)defSaveText(TextTitle,text):os.chdir('/home/lei/zol/')f=open(str(TextTitle)+'txt','w')f.write(text)f.close()whilenum<=100:url='http://xiaohua.zol.com.cn/new/'+str(num)+'.html'GetText(GetTrueUrl(Gethref(url)))num=num+1大功告成!剩下面的等候文件下载完成就开始啦!效果图: