当前位置 博文首页 > 文章内容

    【Python爬虫】一个简单的网络爬虫

    作者: 栏目:未分类 时间:2020-07-14 16:03:20

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    网页结构的相似性

    爬虫的目的,是从网站中 自动化 的 批量 提取数据。

    首先尝试完成以下操作:

    从以下链接中提取电影的标题和标题后的年份:

    从以下链接中提取每只股票的实时价格(最大那个数字):

    链接相似 的网页通常具有相似的外观。

    外观相似 的网页通常具有相似的网页结构。

    这两个相似性是爬虫能够从一系列网站中自动化提取数据的重要基础。

     代码:

    from requests_html import HTMLSession
    session = HTMLSession()
    links = ['https://movie.douban.com/subject/1292052/', 'https://movie.douban.com/subject/1962665/', 'https://movie.douban.com/subject/26752088/']
    
    for link in links:
        r = session.get(link)
        title = r.html.find('#content > h1 > span:nth-child(1)', first=True)
        year = r.html.find('#content > h1 > span.year', first=True)
        print(title.text, year.text)

    也许你用了上面的 股票价格 链接作为爬取对象,你会惊讶的发现程序运行出错了。

    事实上,很多网站使用 Javascript 代码来生成网页内容,你的爬虫需要正确解析 Javascript 才能获得你所看到的页面。

    requests_html 库提供了一个简单的方法来处理应对情况,你只需要在 r = session.get(link) 后,增加一行 r.html.render(),重新运行代码即可。

    (初次运行时需要下载一些辅助工具,请耐心等待,如果下载进度条迟迟未能出现,重新运行程序。)

    from requests_html import HTMLSession
    session = HTMLSession()
    links = ['http://stock.finance.sina.com.cn/usstock/quotes/aapl.html', 'http://stock.finance.sina.com.cn/usstock/quotes/bidu.html', 'http://stock.finance.sina.com.cn/usstock/quotes/msft.html']
    
    for link in links:
        r = session.get(link)
        r.html.render()
        title = r.html.find('#content > h1 > span:nth-child(1)', first=True)
        year = r.html.find('#content > h1 > span.year', first=True)
        print(title.text, year.text)