Board logo

标题: [问题求助] 【已解决】beautifulsoup肿么用 [打印本页]

作者: 949825667@qq.co    时间: 2016-8-25 10:08     标题: 【已解决】beautifulsoup肿么用

本帖最后由 949825667@qq.co 于 2016-8-30 16:44 编辑
  1. import urllib.request
  2. import bs4
  3. import re
  4. def trans(f):
  5.     searchUrl = "http://dict.youdao.com/search?q=" + f + "&keyfrom=dict.index"
  6.     web = urllib.request.urlopen(searchUrl)
  7.     soup = bs4.BeautifulSoup(web, "html.parser")
  8.     homegrids = soup.find(id='wordGroup')
  9.     a = homegrids.find_all('a')
  10.     for i in a:
  11.         print(i.string)
  12. def main():
  13.     f = input('')
  14.     trans(f)
  15. if __name__ == '__main__':
  16.     main()
复制代码
<div id="wordGroup" class="trans-container tab-content hide more-collapse">
                                                                    <p class="wordGroup">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/look_like/#keyfrom=dict.basic.wordgroup">look like</a></span>
                                                                                看起来像…
                                                </p>
                                                                        <p class="wordGroup">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/feel_like/#keyfrom=dict.basic.wordgroup">feel like</a></span>
                                                                                想要;感到好似
                                                </p>
                                                                        <p class="wordGroup">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/something_like/#keyfrom=dict.basic.wordgroup">something like</a></span>
                                                                                有点像;大约;差不多
                                                </p>
                                                                        <p class="wordGroup">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/if_you_like/#keyfrom=dict.basic.wordgroup">if you like</a></span>
                                                                                如果你愿意;如果你喜欢的话
                                                </p>
                                                                        <p class="wordGroup">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/nothing_like/#keyfrom=dict.basic.wordgroup">nothing like</a></span>
                                                                                没有什么能比得上;一点也不象
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/anything_like/#keyfrom=dict.basic.wordgroup">anything like</a></span>
                                                                                多少有点像
                                                </p>
                                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_as/#keyfrom=dict.basic.wordgroup">like as</a></span>
                                                                                [方言]如同,正如
                                                    <a href="javascript:void(0);"class="century21" title="来源于21世纪大英汉词典">&nbsp;</a>
                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_a_dream/#keyfrom=dict.basic.wordgroup">like a dream</a></span>
                                                                                毫不费力地;轻而易举地;完美地
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_anything/#keyfrom=dict.basic.wordgroup">like anything</a></span>
                                                                                [口]拼命地;非常猛地;全力地;象什么似的
                                                </p>
                                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/such_like/#keyfrom=dict.basic.wordgroup">such like</a></span>
                                                                                像这类的
                                                    <a href="javascript:void(0);"class="century21" title="来源于21世纪大英汉词典">&nbsp;</a>
                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_to_do/#keyfrom=dict.basic.wordgroup">like to do</a></span>
                                                                                喜欢做某事(特指某一次)
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_crazy/#keyfrom=dict.basic.wordgroup">like crazy</a></span>
                                                                                拼命地;[口]发疯似的
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_what/#keyfrom=dict.basic.wordgroup">like what</a></span>
                                                                                举个例子吧;比如说
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_mad/#keyfrom=dict.basic.wordgroup">like mad</a></span>
                                                                                [口]疯狂地;猛然地;极度地
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_it_or_not/#keyfrom=dict.basic.wordgroup">like it or not</a></span>
                                                                                不管你喜欢不喜欢
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_hell/#keyfrom=dict.basic.wordgroup">like hell</a></span>
                                                                                拼命地
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/likes_and_dislikes/#keyfrom=dict.basic.wordgroup">likes and dislikes</a></span>
                                                                                好恶;喜欢与厌恶
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/make_like/#keyfrom=dict.basic.wordgroup">make like</a></span>
                                                                                [美俚]模仿;扮演
                                                </p>
                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/or_the_like/#keyfrom=dict.basic.wordgroup">or the like</a></span>
                                                                                诸如此类
                                                </p>
                                                                                        <p class="wordGroup collapse">
                                <span class="contentTitle"><a class="search-js" href="/w/eng/like_nothing_on_earth/#keyfrom=dict.basic.wordgroup">like nothing on earth</a></span>
                                                                                世间罕有的
                                                                    ,
                                                ◎世上罕见的,奇怪得很的
                                                                    ,
                                                ◎难看极了;糟透了;难过极了
                                                    <a href="javascript:void(0);"class="century21" title="来源于21世纪大英汉词典">&nbsp;</a>
                                </p>
研究了半天beautifulsoup只能把标签a里面的词组取出来,汉语解释肿么取!
作者: 949825667@qq.co    时间: 2016-8-25 10:20

本帖最后由 949825667@qq.co 于 2016-8-25 10:23 编辑

自己用正则匹配了一下,没有得到完美的效果,有木有更好的正则匹配
我这个写法会连<a href="javascript:void(0);"class="century21" title="来源于21世纪大英汉词典">&nbsp;</a>也匹配到
  1. import urllib.request
  2. import bs4
  3. import re
  4. def trans(f):
  5.     searchUrl = "http://dict.youdao.com/search?q=" + f + "&keyfrom=dict.index"
  6.     web = urllib.request.urlopen(searchUrl)
  7.     soup = bs4.BeautifulSoup(web, "html.parser")
  8.     homegrids = soup.find(id='wordGroup')
  9.     a = homegrids.find_all('a')
  10.     print(homegrids.find_all('a'))
  11.     for i in a:
  12.         print(i.string)
  13.     for j in homegrids:
  14.         results = re.findall(r'.*</span>(.*)</p>', str(j), re.S)
  15.         #print(str(j))
  16.         for result in results:
  17.             print(result)
  18. def main():
  19.     f = input('')
  20.     trans(f)
  21. if __name__ == '__main__':
  22.     main()
复制代码

作者: wskwfkbdn    时间: 2016-8-25 10:20

因为这个是utf-8编码的
作者: 949825667@qq.co    时间: 2016-8-25 10:34

脑袋笨,学得慢!
作者: 523066680    时间: 2016-8-25 11:01

本帖最后由 523066680 于 2016-8-25 11:02 编辑

楼主毅然放弃Perl 转战Python 这真是一个明智的举动

楼主觉得自己笨,那得看前面对计算机了解多少呀,几年级了?
作者: 949825667@qq.co    时间: 2016-8-25 11:03

回复 5# 523066680


    :'(
作者: 949825667@qq.co    时间: 2016-8-25 11:03

回复 5# 523066680


    各种语言都不懂!
作者: 949825667@qq.co    时间: 2016-8-25 11:05

应该去上什么零基础三十天就牛逼的课程:lol
作者: 523066680    时间: 2016-8-25 11:05

本帖最后由 523066680 于 2016-8-25 11:08 编辑

回复 7# 949825667@qq.co


    简单的回答不要分两个帖啦,尽量一起回答。
几年级?如果在上大学或者高中,主修什么方向的?
如果已经工作了,从事哪方面?

你可以看看  《七天七语言》 《七周七并发模型》 。。。。。
XX语言从入门到弃坑、从入门到颈椎病 系列
作者: 949825667@qq.co    时间: 2016-8-25 11:08

回复 9# 523066680


    刚毕业,其实是个老师!想从事数据下载和分析的工作
作者: happy886rr    时间: 2016-8-25 11:11

回复 10# 949825667@qq.co
当老师真好,地位也高,你真想做程序员?
作者: 523066680    时间: 2016-8-25 11:12

回复 10# 949825667@qq.co


    尼玛,原来是数据挖掘专家,据说工资灰常高。
有个R语言好像适合数据可视化。


   什么科目的老师……
作者: 949825667@qq.co    时间: 2016-8-25 11:13

回复 11# happy886rr


    当老师不考编制没意思!工资也不高!至于地位没感觉,我一个刚毕业的!
作者: 949825667@qq.co    时间: 2016-8-25 11:14

回复 12# 523066680


    偏离话题了,不如帮我想想怎么把词组和意思提取出来,最好打印成并排的两列
作者: happy886rr    时间: 2016-8-25 11:20

回复 13# 949825667@qq.co
考编制又不难,就是个教育学,专业课,还有你教师资格证考下没
作者: 949825667@qq.co    时间: 2016-8-25 11:22

回复 15# happy886rr


    师范专业的,必须有!主要不喜欢当老师!
作者: 523066680    时间: 2016-8-25 11:42

回复 14# 949825667@qq.co


    我帮你想你又不给我小费。坐等大神
作者: 949825667@qq.co    时间: 2016-8-25 12:01

回复 17# 523066680


    我也是自己学着玩,也没人给我工资!
作者: 523066680    时间: 2016-8-25 12:09

回复 18# 949825667@qq.co


    所以你现在要做正则匹配?这个问题非常基础。如果你有python电子书/纸质书,看正则部分就知道了。
Chinaunix有很多帖子可以参考。
作者: codegay    时间: 2016-8-25 12:24

正则需要多练习就好多了。
用了bs的话,可以用xpath,不过我也还没学会。

举个例子吧,你需要提取的是什么内容?
作者: 949825667@qq.co    时间: 2016-8-25 12:40

回复 20# codegay


    大概就是这样,不过我也不急了,毕竟才看了Python两三天!很多东西都不了解
look like   看起来像
feel like   感到好似
作者: codegay    时间: 2016-8-25 13:20

回复 21# 949825667@qq.co


    基础的东西还是要懂的。可以找本python基础教程看一遍。
作者: 949825667@qq.co    时间: 2016-8-25 13:27

回复 22# codegay


    好!
作者: pcl_test    时间: 2016-8-25 16:24

本帖最后由 pcl_test 于 2017-5-26 21:27 编辑

https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
  1. # encoding: utf-8
  2. # Python 3.6.0
  3. import requests
  4. from bs4 import BeautifulSoup
  5. def trans(str):
  6.     html=requests.post("http://dict.youdao.com/search?q="+str).content
  7.     text=str+'\r\n'
  8.     if html:
  9.         soup = BeautifulSoup(html,"html.parser")
  10.         container = soup.find("div", attrs={"class": "trans-container"})
  11.         lis = container.find_all('li')
  12.         authDictTrans = lis[0].find_all("span", attrs={"class": "def"})
  13.         if authDictTrans:
  14.             for span in authDictTrans:
  15.                 text+=span.string+'\r\n'
  16.         else:
  17.             for li in lis:
  18.                 text+=li.string+'\r\n'
  19.     return text
  20. str='look like,feel like,something like,if you like,nothing like,anything like,like as,like a dream,like anything,such like,like to do,like crazy,like what,like mad,like it or not,like hell,likes and dislikes,make like,or the like,like nothing on earth'
  21. for kw in str.split(','):
  22.     print(trans(kw))
复制代码

作者: codegay    时间: 2016-8-26 06:10

本帖最后由 codegay 于 2016-8-26 07:21 编辑

我懒得扒网页,所以查了一下,这类服务是有API可以用的。我懒得自己申请了,就用了别人的。
比如金山词霸也是同样有API可以用的。实现同样的功能代码量会很少。
  1. #代码一 只使用python3标准库,需要自己指定decode并把str loads成python对象
  2. import urllib.request
  3. import json
  4. apiurl = 'http://fanyi.youdao.com/openapi.do?keyfrom=k772933230&key=1494307&type=data&doctype=json&version=1.1&q={input}'
  5. #apiurl = 'http://fanyi.youdao.com/openapi.do?keyfrom=mypydict&doctype=json&q={input}&version=1.1&key=27855339&type=data'
  6. #apiurl = 'http://fanyi.youdao.com/fanyiapi.do?keyfrom=youkulabs&key=158194127&type=data&doctype=json&version=1.1&q={input}'
  7. #以上三个有道API 是在网上看到的。目前都是可以直接使用的。
  8. #申请自己的API 以及用法,请看这里 http://fanyi.youdao.com/openapi?path=data-mode
  9. req =  urllib.request.urlopen
  10. raw = req(apiurl.format(input="python")).read()
  11. #print(raw.decode("utf8"))
  12. #print(type(raw.decode("utf8"))) # => str
  13. result=json.loads(raw.decode("utf8"))
  14. for r in result["basic"]["explains"]:
  15.     print(r)
  16. #代码二 使用第三方库 requests ,用起来会感觉很方便,自动会根据网页头解码并且把json转成python对象。
  17. import requests
  18. txt = requests.get(apiurl.format(input="driver")).json()
  19. for r in txt["basic"]["explains"]:
  20.     print(r)
  21.    
  22. """
  23. #输出结果:
  24. n. 巨蟒;大蟒
  25. n. (法)皮东(人名)
  26. n. 驾驶员;驱动程序;起子;传动器
  27. n. (Driver)人名;(德)德里弗;(英)德赖弗
  28. """
复制代码

作者: happy886rr    时间: 2016-8-26 08:55

回复 25# codegay
棒,你的方法二5行代码就解决了字典查询。
作者: 949825667@qq.co    时间: 2016-8-26 09:29

回复 25# codegay


    你说的这些我早就实现了,我是想要获取更多的数据,比如词组短语,例句,有道翻译的api我用过了!只有简单的单词释义
作者: 523066680    时间: 2016-8-26 09:31

本帖最后由 523066680 于 2016-8-26 09:39 编辑

回复 26# happy886rr

    辣也还是在线的,还是离线利索。
作者: 949825667@qq.co    时间: 2016-8-26 09:32

回复 25# codegay


    仔细看了一下,很多可以借鉴的!多谢多谢
作者: 949825667@qq.co    时间: 2016-8-26 09:33

回复 24# pcl_test


    多谢版主回复,可能我没表达清楚,所以这个代码并不能实现我要的效果,我想我还是自己琢磨吧!再有困难再来请教大家!
作者: 523066680    时间: 2016-8-26 09:36

本帖最后由 523066680 于 2016-8-26 09:37 编辑

回复 30# 949825667@qq.co


    人家授之以渔,页面都给你了,你却只想要个结果。可见……  不说了
作者: 949825667@qq.co    时间: 2016-8-26 09:39

回复 31# 523066680


    我哪里想要结果了?我再论坛提问不少次了,大多都是看看别人的东西,自己想到了。哪里看到我想要结果了?有启发对我更重要。我又不是拿着结果交差的,我要结果干嘛?
作者: 949825667@qq.co    时间: 2016-8-26 09:40

回复 31# 523066680


    他确实交给我方法了,但是这个方法我知道了,我就说一声我知道了。然后我自己再琢磨,没有说非要别人给个结果吧!你这么污蔑我,我以后怎么玩?
作者: 523066680    时间: 2016-8-26 09:46

学习能力弱了点,继续努力吧
作者: 949825667@qq.co    时间: 2016-8-26 09:47

回复 34# 523066680


    大哥,你看我第一页,我给出的代码,其实已经基本实现我的要求了,我就是问了一句有木有更好的正则匹配!最后落得这样的说法,好难过!
作者: 523066680    时间: 2016-8-26 09:49

回复 35# 949825667@qq.co


    我就是说你的正则匹配还是没搞定,哈哈
作者: 949825667@qq.co    时间: 2016-8-26 09:49

总被人认为伸手的,我都是查了好久都木有办法,才问的!而且大多都还是自己解决问题的!以后看看有木有氛围更好的论坛吧!这个先逛着!
作者: 949825667@qq.co    时间: 2016-8-26 09:51

回复 37# 523066680


    那个我一直没有去想啊,我又不是不干活天天学的!躺着吃白饭啊!一天抽一点时间看看!以后尽量自己解决问题吧,没人教真累!
作者: 949825667@qq.co    时间: 2016-8-26 09:52

有空再来看看,搬砖去了!
作者: 523066680    时间: 2016-8-26 09:55

回复 38# 949825667@qq.co


    自己动手丰衣足食
作者: codegay    时间: 2016-8-26 09:57

回复 27# 949825667@qq.co


    下次提问,请在帖子里一次性说清楚你要干嘛。
作者: 949825667@qq.co    时间: 2016-8-26 10:11

回复 41# codegay


    其实第一页很清楚了!你们没看而已!
作者: 523066680    时间: 2016-8-26 11:21

楼主生气了   你去chinaunix试试吧
作者: happy886rr    时间: 2016-8-26 11:28

回复 28# 523066680
离线的好像你以前有篇文章写得很不错。
作者: 523066680    时间: 2016-8-26 11:44

回复 44# happy886rr


    自己用着还行,现在查词基本在终端,手感利索。
汉英字典(CE)提取脚本
CE.pl

有道拆过了,有点收集癖的心态,又去试了灵格斯,结果人家说是DES加密,搞了很久,好像还用了压缩算法,知识不够用了。
“看雪”上面有人贴出了灵格斯字典加密解密逆向的代码(里面好像没有DES有关的东西…… 懵了)
[看雪论坛]灵格斯词典格式逆向
另一个分析:
灵格斯LDX,LD2等格式分析

两个现成的项目,可以直接导明文
https://github.com/librehat/kdictionary-lingoes

https://github.com/windylea/lingoes-converter
You can just download a binary distribution for Windows here and run it:
http://tiny.cc/lingoes-converter

顺便发一个DES源码
作者: pcl_test    时间: 2016-8-26 11:56

回复 30# 949825667@qq.co

look like
feel like
like nothing on earth
这三个短语,你希望得到的结果是什么?
作者: 949825667@qq.co    时间: 2016-8-26 13:15

回复 46# pcl_test


    第一页的代码相信版主大人看到了吧!就是输入一个单词,获取html,从html里面解析到词组短语部分!最后表现出来的应该是
look like     看起来像
feel like      想要
这种并列的两列
作者: 949825667@qq.co    时间: 2016-8-26 13:21

回复 46# pcl_test


    但是我处理不干净,所以我输出的结果是这样的,有一行<a class="century21" href="javascript:void(0);" title="来源于21世纪大英汉词典"> </a>我去不掉
没有什么能比得上;一点也不象
多少有点像
[方言]如同,正如
                                                    <a class="century21" href="javascript:void(0);" title="来源于21世纪大英汉词典"> </a>
毫不费力地;轻而易举地;完美地
[口]拼命地;非常猛地;全力地;象什么似的
像这类的
                                                    <a class="century21" href="javascript:void(0);" title="来源于21世纪大英汉词典"> </a>
喜欢做某事(特指某一次)
拼命地;[口]发疯似的
举个例子吧;比如说
作者: pcl_test    时间: 2016-8-26 13:50

回复 47# 949825667@qq.co


    那么24楼显示的结果哪里不符合,除了手动输入、输出格式外
作者: 949825667@qq.co    时间: 2016-8-26 13:55

回复 49# pcl_test


    我错了,我昨晚在家测试的时候是错误的!对不起斑竹大人的帮助了!你的代码方便有效!
作者: 949825667@qq.co    时间: 2016-8-26 13:57

回复 50# 949825667@qq.co


    我原意是输入一个单词,获取到这个单词页面的短语,不是直接输入短语查询,不过版主给了我启发,我去试试了!哈哈哈哈!




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2