requests+正则表达式(一) 之 csdn 页面全部链接 和 糗事百科列表中用户名和内容的获取

字数 344阅读 177
前面我们使用了 requests 这个类库对网页全部数据的请求,但是随着需求的提高,全部获取数据已经不满足我们的要求了,我们需要对网页中某些数据进行提取而已,其他没有用的数据没必要获取下来,这时候我们就需要对页面数据进行筛选了,筛选的办法有很多,正则表达式是我们使用最多的方式之一,因此接下来我们就使用 requests 和 正则表达式去获取 csdn 页面中全部的链接 和 糗事百科列表里的 用户名 和 对应的发表内容

(正则表达式学习地址:http://www.runoob.com/python/python-reg-expressions.html

案例一:获取 csdn 页面中全部的链接 (http://blog.csdn.net/)

#定义爬取 csdn 页面中的所有网页链接
def get_csdn_url(url):
    r = requests.get(url, headers=headers)
    r.encoding = "utf-8" #编码
    data = r.text #转换成文本(返回的结果是 html 源码)
    reg = r'(https?://[^\s)";]+\.(\w|/)*)'#根据需求构建好链接表达式
    link_list = re.compile(reg, re.S).findall(data)
    link_list = list(set(link_list))    #去掉重复元素
    return link_list


#调用
url = "http://blog.csdn.net/"
linklist = get_csdn_url(url)
for link in linklist:   # i 是元组
    print(link[0])

效果图如下:
0.png

案例二:爬取糗事百科列表里的 用户名 和 对应的发表内容(https://www.qiushibaike.com/8hr/page/第几页/)

#定义爬取 糗事百科 用户名和内容 的函数
def get_qiushi_username_content(url, page):
    r = requests.get(url, headers=headers)#请求内容
    r.encoding = "utf-8"#设置编码
    data = r.text  #获取文本内容
    #用户名
    reg_un = r'<h2>(.*?)</h2>'
    user_list = re.compile(reg_un, re.S).findall(data)
    #内容
    reg_content = r'<div class="content">.*?<span>(.*?)</span>.*?</div>'
    content_list = re.compile(reg_content, re.S).findall(data)
    
    x = 1
    #通过 for 循环遍历段子内容并将内容分别赋给对应的变量
    for content in content_list:
        content = content.replace("\n","")
        #用字符串作为变量名,先将对应的字符串赋给一个变量
        name = "content"+str(x)
        #通过 exec() 函数实现用字符串作为变量名并赋值
        exec(name +'=content')
        x += 1 #自增

    y = 1
    #通过 for 循环遍历用户,并输出该用户对应的内容
    for user in user_list:
        name = "content"+str(y)
        print("第 "+ str(page) +" 页,第 "+ str(y) +" 个用户名:"+ user)
        print("对应内容为: ")
        exec("print("+ name +")")
        print("\n")
        y += 1



#调用
for i in range(6): #顺手爬取5页数据
    url = "https://www.qiushibaike.com/8hr/page/"+str(i)
    get_qiushi_username_content(url, i)

效果图如下:
1.png
好了,感觉爬虫也挺好玩的哦,嘿嘿,如果正则还觉得难的话建议去看下开篇的正则教材哦,下一篇爬取图片;欢迎留言给建议,如果对您有帮助的话可以点个赞哦,嘿嘿!

推荐阅读更多精彩内容