python的爬虫技术爬去糗事百科的的方法详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python的爬虫技术爬去糗事百科的的方法详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4149字,纯文字阅读大概需要6分钟。
内容图文
![python的爬虫技术爬去糗事百科的的方法详解](/upload/InfoBanner/zyjiaocheng/431/7fbc5ae3c3b54930a638908a8c8988a1.jpg)
实现目标:1,爬取到糗事百科的段子
2,实现每次爬去一个段子,每按一次回车爬取到下一页
技术实现:基于python的实现,利用Requests库,re库,bs4库的BeautifulSoup方法来实现的
主要内容:首先我们要理清一下爬取实现的思路,我们来构建一下主体框架。第一步我们先写一个利用Requests库来获取网页的方法,第二步我们利用bs4库的BeautifulSoup方法来分析所获取的网页信息并利用正则表达式来匹配相关的段子信息。第三步我们来打印出获得的信息。以上方法我们都通过一个主函数来进行执行。
一,首先导入相关的库
import requests from bs4 import BeautifulSoup import bs4 import re
二,首先进行网页信息的获取
def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return ""
三,把信息放到r后再进行解析
soup = BeautifulSoup(html,"html.parser")
我们需要的是段子的内容和发布人,通过网页的查看源代码我们知道段子的发布人在:
'p', attrs={'class': 'content'}中
段子的内容在
'p', attrs={'class': 'author clearfix'}中
所以我们通过bs4库的方法来提取这两个标签的具体内容
def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'})
然后通过具体到正则表达式来获取信息
for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d)
我们需要注意的是使用find_all以及re的findall方法返回的都是一个列表,使用正则表达式时我们只是粗略提取并没有把标签中的换行符去掉
接下来我们只需要把2个列表的内容进行组合输出就可以了
def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b)
然后我做一个输入控制函数,输入Q返回错误,退出,输入回车返回正确,进行下一页段子的加载
def input_enter(): input1 = input() if input1 == 'Q': return False else: return True
我们通过主函数来实现所输入的控制,如果控制函数返回的是错误就不执行输出,如果返回的是正确就继续输出。我们通过一个for循环来进行加载下一页。
def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break
这里我们需要注意到是每一次for循环都会刷新一次lis【】和li【】,这样每次都可以正确输出该网页的段子内容
一下为源代码:
import requests from bs4 import BeautifulSoup import bs4 import re def getHTMLText(url): try: user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent': user_agent} r = requests.get(url,headers = headers) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: return "" def fillUnivlist(lis,li,html,count): soup = BeautifulSoup(html,"html.parser") try: a = soup.find_all('p', attrs={'class': 'content'}) ll = soup.find_all('p', attrs={'class': 'author clearfix'}) for sp in a: patten = re.compile(r'<span>(.*?)</span>',re.S) Info = re.findall(patten,str(sp)) lis.append(Info) count = count + 1 for mc in ll: namePatten = re.compile(r'<h2>(.*?)</h2>', re.S) d = re.findall(namePatten, str(mc)) li.append(d) except: return "" return count def printUnivlist(lis,li,count): for i in range(count): a = li[i][0] b = lis[i][0] print ("%s:"%a+"%s"%b) def input_enter(): input1 = input() if input1 == 'Q': return False else: return True def main(): passage = 0 enable = True for i in range(20): mc = input_enter() if mc==True: lit = [] li = [] count = 0 passage = passage + 1 qbpassage = passage print(qbpassage) url = 'http://www.qiushibaike.com/8hr/page/' + str(qbpassage) + '/?s=4966318' a = getHTMLText(url) fillUnivlist(lit, li, a, count) number = fillUnivlist(lit, li, a, count) printUnivlist(lit, li, number) else: break main()
第一次做还是有很多可以优化的地方希望大家可以指出来。
以上就是python的爬虫技术爬去糗事百科的的方法详解的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是互联网集市为您收集整理的python的爬虫技术爬去糗事百科的的方法详解全部内容,希望文章能够帮你解决python的爬虫技术爬去糗事百科的的方法详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。