zoukankan      html  css  js  c++  java
  • 爬虫练习一(爬取笑话集)

    爬取笑话集网页

    目标网址为:http://www.jokeji.cn/list.html 

    感觉这个网站挺简单,不用登陆,没有复杂的功能,好爬~

    可以现在浏览器中访问这个链接看一下效果,你会发现这个页面是个目录,有很多笑话页面的链接。

    还是先使用简单的代码试试有没有效果:

    由于爬取的内容发现乱码,所以加上encoding

    import requests         # 导入requests库
    jokePage = requests.get('http://www.jokeji.cn/list.htm')
    jokePage.encoding = 'gbk'
    print(jokePage.text)
    

    爬取每个笑话页面的连接

    刚刚我们爬的那个页面,是所有笑话的目录,每个目录是一个链接,打开链接才能看到笑话的内容,所以我们要从刚刚爬取的页面中,提取所有的笑话页面链接。

    * 网页就是文本,我们要从一个网页中爬取我们想要的内容,就是处理字符串 *。所以,分析刚刚爬取的页面,找到其中所有的笑话页面链接地址。

    可以简单的认为,一个笑话页面的链接,都是如下结构的:/jokehtml/***/****.htm",不信你可以去刚刚爬到的网页源码里面看看! 
    知道了笑话页面链接的结构,就可以从网页源码里把所有的链接提取出来啦,当然,要使用正则表达式! 

    import requests         # 导入requests库
    import re               # 导入正则表达式库
    jokePage = requests.get('http://www.jokeji.cn/list.htm')
    jokePage.encoding = 'gbk'
    jokeList = re.findall('/jokehtml/[w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
    print(jokeList)

    利用爬到的笑话网页链接去访问笑话页面

    简单点,先访问我们获取到的第一个链接,既 http://www.jokeji.cn + jokeList[0] 这个页面,访问的方法一样是用requests.get()方法,代码如下:

    import requests         # 导入requests库
    import re               # 导入正则表达式库
    jokePage = requests.get('http://www.jokeji.cn/list.htm')
    jokePage.encoding = 'gbk'
    jokeList = re.findall('/jokehtml/[w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
    jokeContent = requests.get('http://www.jokeji.cn/'+jokeList[1])     # 访问第一个链接
    jokeContent.encoding = 'gbk'
    print(jokeContent.text)

               比如我就发现,所有的笑话都在<p></p>标签中,而且<p>后面都跟了一个数字代表这个笑话的序号,而其他非笑话的 <p>标签后就没有数字,所以可以用'<p>[0-9].*</p>'这个简单的正则匹配到所有笑话!,把上面代码修改最后两句:

    import requests         # 导入requests库
    import re               # 导入正则表达式库
    jokePage = requests.get('http://www.jokeji.cn/list.htm')
    jokePage.encoding = 'gbk'
    jokeList = re.findall('/jokehtml/[w]+/[0-9]+.htm',jokePage.text)   # 使用正则表达式找到所有笑话页面的链接
    jokeContent = requests.get('http://www.jokeji.cn/'+jokeList[0])     # 访问第一个链接
    jokeContent.encoding = 'gbk'
    jokes = re.findall('<P>[0-9].*</P>', jokeContent.text)      # 利用正则找到页面中的所有笑话
    print(jokes)

    完整代码如下:

    import requests
    import re
    jokePage = requests.get('http://www.jokeji.cn/list.htm')   #取到笑话集完整网址
    jokePage.encoding = 'gbk'
    # print(jokePage.text)  #打印html页面
    jokeList = re.findall('/jokehtml/[w]+/[0-9]+.htm',jokePage.text)   #匹配到所有的链接
    print(jokeList)
    for jokeLink in jokeList:  #取到每一个链接
            jokeContent = requests.get('http://www.jokeji.cn/' + jokeLink)      # 访问第一个链接
            jokeContent.encoding = 'gbk'
            jokes = re.findall('<P>[0-9].*</P>', jokeContent.text)
            for joke in jokes:          # 循环打印笑话
                    print(joke)
                    print()

        最后还是别忘了,这篇文章主要目的是练习使用requests库,别只顾看笑话了,想想爬笑话过程中用到了requests的什么功能。实际上学会了用代码去访问网页!

  • 相关阅读:
    [java] 怎么去掉小数点后面不需要的0
    [SoapUI] 在SoapUI script里获取Response(Json格式)某个节点值
    nacos启动不停打印日志[com.alibaba.nacos.client.naming.updater] INFO com.alibaba.nacos.client.naming:192
    sppringcloud应用启动 访问gateway无法path无法路由到目标应用,404
    springcloud项目启动gateway报错org.springframework.cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springframework.http.codec.ServerCodecConfigurer' that could not be found
    nacos 01
    微服务spring-cloud day2
    springcloud本地启动指定profile后错误If you are using the git profile, you need to set a Git URI in your configuration.
    微服务spring-cloud day1
    金融云部署sofaboot应用指定了项目路径健康检查无法通过,windows格式/unix格式/mac格式的坑
  • 原文地址:https://www.cnblogs.com/moning/p/8299037.html
Copyright © 2011-2022 走看看