使用Python和Beautifulsoup进行刮擦

时间:2017-03-14 22:40:34

标签: python beautifulsoup

继续Beautifulsoup - trouble scraping datalist with links in it

这是我用Python / Beautifulsoup抓取的HTML的一个例子:

<dl>
<dd>
    <strong>
        <a name="45933" href="http://www.eslcafe.com/jobs/china/index.cgi?read=45933">TOP RANKING UNIVERSITY SEEKS PROFESSIONAL LECTURERS</a>
    </strong>
    <br>
    Chongqing University -- Tuesday, 14 March 2017, at 6:58 a.m.
</dd>

<dd></dd>
<dd></dd>
<dd></dd>
</dl>

这是我的计划:

import bs4 as bs
import urllib.request


def chinaJobs():
    sauce = urllib.request.urlopen('http://www.eslcafe.com/jobs/china/').read()

    soup = bs.BeautifulSoup(sauce, 'html.parser')

    ads = []

    for dd in soup.find_all('dd'):
        link = dd.a.get('href')
        link_text = dd.a.text
        link_text = link_text.lower()
        *_, dd_text = dd.stripped_strings

        if 'university' in link_text:
            ads.append([link, link_text, dd_text])

    for ad in ads:          
        for job in ad:
            print(job)
        print("")

chinaJobs()

我可以在<br>标记之后获取信息,但这是错误的信息。这就是网站上的信息:

  顶级排名大学寻求专业讲师

     
    

重庆大学 - 2017年3月14日星期二上午6:58

  

这就是我希望我的输出看起来像:

http://www.eslcafe.com/jobs/china/index.cgi?read=45933
top ranking university seeks professional lecturers
Chongqing University -- Tuesday, 14 March 2017, at 6:58 a.m.

这就是我的输出:

http://www.eslcafe.com/jobs/china/index.cgi?read=45933
top ranking university seeks professional lecturers
EnglishTeacherChina.com -- Sunday, 12 February 2017, at 1:45 p.m.

每个输出都打印出来:

  

EnglishTeacherChina.com - 2017年2月12日星期日下午1点45分

为什么你认为它是这样做的,我该怎么做才能解决它?

1 个答案:

答案 0 :(得分:0)

您要查找的字符串包含在<br>标记中,一个选项是简单地使用br来提取它:

soup.find("dd").a.text
# u'TOP RANKING UNIVERSITY SEEKS PROFESSIONAL LECTURERS'

soup.find('dd').a.get("href")
# u'http://www.eslcafe.com/jobs/china/index.cgi?read=45933'

soup.find('dd').br.text.strip()
# u'Chongqing University -- Tuesday, 14 March 2017, at 6:58 a.m.'

您可以尝试将dd_text行更改为dd_text = dd.br.text.strip()

相关问题