走进图文并茂的攻略世界
本文作者:石 艳,中南财经政法大学统计与数学学院
本文编辑:张孟晗
技术总编:陈 鼎
Stata&Python云端课程来啦!
为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~原价2400元的Python编程培训课程,现在仅需100元,详情请查看推文《Python云端课程福利大放送!0基础也能学~》。关于Stata,爬虫俱乐部推出了系列课程,内容包括字符串函数、正则表达式、爬虫专题和文本分析,可以随心搭配,价格美丽,物超所值,更多信息可查看Stata系列推文《与春天有个约会,爬虫俱乐部重磅推出正则表达式网络课程!》、《与春天有个约会,爬虫俱乐部重磅推出基本字符串函数网络课程》等。变的是价格,不变的是课程质量和答疑服务。对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦
导读
还记得之前的的云南旅游攻略爬取吗?我们当时只是获取到了作者、攻略标题还有相关链接等信息,并没有获得攻略的详细内容,那这篇文章就带大家获取详细内容。除此之外,像攻略这种图文并茂的信息,我们希望获得一个良好的阅读体验,而不是以纯文本的形式呈现,所以可以结合html2text库来将获取到的文本内容转化为markdown格式,那让我们开始吧!
1
获取文本内容
import requests
from bs4 import BeautifulSoup
url = "https://travel.qunar.com/youji/2773106"
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36',
}
r = requests.get(url,headers=headers)
r.recoding='utf8'
html=r.text
html = html.replace(" ", "")
html = html.replace("~~", "~").replace("~~", "~") #避免转换后的格式错误
bsObj = BeautifulSoup(html,'lxml')
title = bsObj.find("h1").text # 标题
content = bsObj.find("div",attrs = {"id":"b_panel_schedule"}) # 正文部分
2
保留原来排版
接下来就让我们再接再厉,通过一步步的调整,争取保留原来排版的完美转化吧。
2.1 图片格式调整
# 图片格式转换
imgs = content.find_all("img")
for img in imgs:
src = img['data-original']
txt = img['title']
img.insert_after("![{0}]({1})".format(txt,src))
img.extract()
2.2 章节标题处理
header5 = content.find_all("h5")
for h5 in header5:
t5 = h5.find("div", attrs = {"class":"b_poi_title_box"})
h5.insert_after("##### " + t5.text)
h5.extract()
#去掉不必要的内容
cmts = content.find_all("div", attrs = {"class":"ops"})
for s in cmts:
s.insert_after('< br/>')
s.extract()
3
格式转换并保存
import html2text as ht
text_maker = ht.HTML2Text()
text = text_maker.handle(str(content))
# 对转换后的格式进一步调整,去掉一些特殊符号,比如多余的空格和文字等
text = text.replace("#\n\n", "# ")
text = text.replace("\\.",".")
text = text.replace(".\n",". ")
text = text.replace("< br/>","\n")
text = text.replace("tr-\n","tr-")
text = text.replace("查看全部 __","")
with open("./data" + title + ".md", 'w', encoding='utf-8') as f:
f.write(text)
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
玩转word文档“大变身”——wordconvert
简述递归
OpenCV库——轻松更换证件照背景色800万年薪!还有谁?!
千古伤心词人,词伤几何?
去哪儿网攻略爬取——跟我一起去大理吧
"有你才有团"——Stata爬取王者荣耀英雄海报
如何获取衡量股民情绪的指标?|东方财富股吧标题爬虫
利用Python构建马科维茨有效边界
rangestat,让统计量灵活滚动起来!
听说这样做立项成功率更高哦
如何处理缺失值?这一篇搞定!
善用dataex命令,高效沟通你我他
大数据下的大学分数线排行榜,快来围观!
《觉醒年代》—带你回到百年前
用Stata画的三维图很奇怪怎么办?
如何随机生成满足特定数据特征的新变量?
爬取无法翻页网页——自然科学基金项目及可视化
爬取京东评论数据进行情感分类
Stata与音乐之间的酷炫连接
这些年,爬虫俱乐部走出的博士们!看这里,近五年各校高被引论文上榜名单!
高校经管类核心期刊发文排行榜
疯狂的科研创新加速器——Stata!
可盐可甜,“粽”有所爱,快来pick你最爱的粽子吧!
好玩有趣的手绘图形库——cutecharts
爬虫实战|摩尔庄园微博话题讨论
一季度财报出炉,哪些公司最烧钱?
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。