【爬虫其实很简单】requests 与 beautiful soup基础入

作者:编程技术
<div.*?class="content">(.*?)</div>

接下来我们要做的事情就是把这些div里面的span都取出来。

环境:Python 2.7 win7

分分快三计划 1<div id =....>

分分快三计划 2

到目前为止,我们已经成功的提取了糗事百科首页的段子。可能精力充沛的同学还成功提取了每条段子的作者、点赞数等等。

已经可以看到都是在一个class 为content 的div里面,这样就很简单了,直接上正则表达式来匹配就好了。

所以现在我们明确了方向——把所有class为article block untagged mb15的div标签找到,然后获取里面span标签的内容。这就是我们要找的段子了。

嘿嘿,这样就能直接看了。OK 好了  这篇文章也很简单,没啥技术含量,莫见怪,代码都是我之前写的,现在依然能用,就发出来了 : )

别急,我们先看看把div里面的img都打印出来是什么样子的。

 

import requestsfrom bs4 import BeautifulSoupheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}r = requests.get('http://www.qiushibaike.com', headers = headers)content = r.textsoup = BeautifulSoup(r.text, 'lxml')divs = soup.find_all(class_ = 'article block untagged mb15')for div in divs: joke = div.span.get_text() print print

前言:有时候无聊看一些搞笑的段子,糗事百科还是个不错的网站,所以就想用Python来玩一下。也比较简单,就写出来分享一下。嘿嘿

恭喜你,你已经学会了如何去分析网页的结构,这是非常重要的一步,学会分析的方法比学会任何工具都要有用。

 

那我们继续修改我们的循环:

 

那怎么办呢?没有关系,我们稍微修改一下我们的代码,改成

 

Mac端的同学先打开terminal,Windows端的同学可以按下'win r'后调出"运行",然后输入cmd打开命令指示行。

 

所以你成功发现了解决的方法——只要找每个总的div里面是否有<div >标签就知道这个段子里面是否包含图片了。

 

同样的,很多网站不需要登录,直接就可以访问其中的内容,比如糗事百科、煎蛋网等等都可以直接爬取下来。

分分快三计划 3

分分快三计划 4打开开发者工具

 

for div in divs: joke = div.span.get_text() print print

 

在进一步讲Beautiful soup的使用之前,我们先分析一下要爬取的网页的结构,这样我们才能更加有效的针对网页的结构对网页的内容进行提取。

分分快三计划 5

你可能就会问了,网页文件里面有那么多的无用信息,我们要怎么把它提取出来呢?

#-*- coding: UTF-8 -*-
# author : Corleone
from Tkinter import *
import urllib2,re

def load(page):
        url="http://www.qiushibaike.com/text/page/" str(page) "/?s=4937798"
        user_agent="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.113 Safari/537.36"
        headers={'User-Agent':user_agent}
        res=urllib2.Request(url,headers = headers)
        html = urllib2.urlopen(res).read()
        reg=re.compile(r'<div.*?class="content">(.*?)</div>',re.S)
        duanzi=reg.findall(html)
        return duanzi
i=0
page=1
def get():
    if i==0:
        txtlist=load(page)
        page =1
    if i<20:
        txt.delete(1.0,END)
        txt.insert(1.0,txtlist[i].replace("","").replace("","").replace("</br>","").replace("n","").replace("<br/>",""))
        i =1
        global i
        global page
        global txtlist
    else:
        i=0

def main():
    root=Tk()   # 定义一个窗口
    root.title("Corleone") # 定义窗口标题
    root.geometry('500x500')  # 定义窗口大小
    b=Button(root,text="next",width=25,bg="red",command=get)  # 定义一个按钮
    b.pack(side=BOTTOM)  # 按钮的布局 放在窗口最下面
    global txt
    txt=Text(root,font=(u"黑体",20)) # 定义一个编辑界面
    txt.pack(expand=YES,fill=BOTH)  # 编辑界面布局 随窗口大小而自动改变
    root.mainloop()   # 让窗口一直在屏幕上显示出来 


main()
pip install lxml

分分快三计划 6

pip install beautifulsoup4

 

原来是有图片,怪不得光看字看不懂。那我们的爬虫现在还不能爬下来图片,那有没有什么办法让这些莫名其妙的话都删掉呢?

 

分分快三计划 7百度的网页文件

现在开始,打开糗事百科网站,先来分析。地址:

分分快三计划 8Developer tools

 

我们先从简单的地方开始——爬取百度的首页。

 

在访问糗事百科的时候我们的浏览器会给网站发送一个识别码,这个识别码就是后面的那一串数字,说明一直是你在访问它。

这里用到了Python自带的图形化界面库 Tkinter 来做gui界面。一页大概20个段子 next 按钮 下一个 看完了 就翻页。

if div.find_all(class_ = 'thumb')的意思就是检查div.find_all(class_ = 'thumb')中有没有找到class为thumb的标签,如果找到了,那就说明我们不打印这一段,所以执行continuecontinue的意思就是跳到循环末尾,直接进入下一层循环,中间的代码都不要执行了,所以我们的代码最后看起来是这样的:

分页也很简单,很有规律,直接接上页数就行了。

同样的,Beautiful soup是一个第三方模块,我们需要使用

OK  既然 都分析完了 那就直接上代码。

可能你也发现了,直接使用我们打印出来的结果分析起来十分吃力。所以我们使用更加高效的工具——开发者工具(Developer tools)来进行分析。

 

divs = soup.find_all(class_ = 'article block untagged mb15')

一般像这种都是文本的话,查看源代码就可以看到内容了。

这次教程中我们要用到的模块是requests模块。如果没有安装requests模块的同学需要先安装一下。

 这样等会再代码里面就可以提取出来段子内容了,再来看一下分页。

import requestsr = requests.get('https://baidu.com')print

分分快三计划 9

知道了方法,我们现在就用代码来实现它。

 

我想你也应该想到了,同样的,我们去分析网页的结构,然后告诉python,如果存在带有图片的网页结构,我们就不打印这个段子。

 

在进行下一步之前我们再确认一下,这个时候你的代码应该是这个样子的:

 

运行一下,可以发现我们已经已经看不到有图片的段子了。

 

首先确认代码环境,我们使用python来进行爬虫的开发。在这里我使用的版本是python3.5。这个教程应该适用于所有python3.x版本, python2.x可能做少许的改动就可以直接运行。

import requestsfrom bs4 import BeautifulSoupheaders = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}r = requests.get('http://www.qiushibaike.com', headers = headers)content = r.textsoup = BeautifulSoup(r.text, 'lxml')divs = soup.find_all(class_ = 'article block untagged mb15')print

某种意义上讲这样的识别码也可以帮助糗事百科分析用户习惯,因为一个识别码对应一个用户,通过这个识别码访问糗事百科的内容的时候,糗事百科就知道你的用户行为。

编程是一门动手的艺术,橘子只有自己尝尝才知道是什么味道~

我们看到,图片的网页标签是img,所以我们只要在代码中检测div中是否有img标签,我们是不是就知道是不是要打印这条段子了呢?

到目前为止, 我们已经把网页的内容放入了Beautiful soup中,接下来就是施展Beautiful soup的魔法,把网页分成一块块的内容了。

分分快三计划 10正常打开

Mac端在打开糗事百科之后按下option command I, Windows端直接按下F12即可。

来安装这个模块。

分分快三计划 11你成功了!

恭喜你已经成功入门了python的爬虫。你现在可以给自己鼓鼓掌

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 入门 爬虫 其实很简单