美文网首页Python爬虫作业@IT·互联网程序员
蜗牛爬行日记——正则表达式与第一个爬虫程序

蜗牛爬行日记——正则表达式与第一个爬虫程序

作者: 喵喵陀佛 | 来源:发表于2017-05-03 23:08 被阅读313次
    路漫漫其修远兮,吾将上下而求索

    先上一个爬虫程序的成品截图,然后一行行代码来细说。

    一、导入requests库和正则表达式

    首先是导入requests库和re模块。使用re模块,python 会将正则表达式转化为字节码,利用 C 语言的匹配引擎进行深度优先的匹配。

    用Python写爬虫,提取网站信息有很多种方法,第三行被注释掉的代码,导入beautifulsoup就是其中一种方法,但本篇文章只说明如何使用正则表达式作匹配。

    二、添加header

    如果不添加该行代码的话,程序会报错。例如出现urllib2.HTTPError: HTTP Error 403: Forbidden的错误。这是由于网站禁止爬虫。

    我们可以加上头信息,伪装成浏览器访问.。

    其中,agent就是请求的身份,如果没有写入请求身份,那么服务器不一定会响应,所以要在headers中设置agent。接下来是写清楚电脑配置和浏览器配置。

    我查了一下资料,此处关于header的内容细究下去还是挺多的,而且分为好几类header。

    比如,在登录之后的知乎首页按F12->network,点击第一个请求,查看headers,可看到General、Response Headers、Request Headers三个分类,有General

    Request URL: https://www.zhihu.com/

    Request Method:GET

    在此不赘述,提供我用的具体代码。

    headers={"User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36"}

    三、定义获取用户id的函数

    主要说一下re的主要功能函数。

    常用的功能函数包括:compile、search、match、split、findall(finditer)、sub(subn)、compile等等参数。这里使用了re.findall(pattern, string[, flags])函数。

    该作用是:在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回。

    下面这个博客里面有关于正则表达式的使用举例,大家可以参考一下。

    http://blog.csdn.net/u014015972/article/details/50541839

    上面的程序只用到了(.*?)这一正则表达式,即写出用户id前后一定数量的代码,即可匹配出用户id。可见以下的使用举例:

    ***************************************

    # .*?的使用举例
    c = re.findall('xx.*?xx', secret_code)
    printc# ['xxIxx', 'xxlovexx', 'xxyouxx']

    ***************************************

    四、输入要爬的网站url,调用获取id的函数

    不同的网站有不同的正则表达式,这里我选的是百度贴吧里的二次元吧。

    https://tieba.baidu.com/p/5097778035

    程序是没有错的,但是由于方法的局限性,除了爬取出用户id之外,还匹配了一些别的文本。

    其实上面那个正则表达式还可以改得更简单些。?

    罗罗攀老师讲课的时候用的是糗事百科的网站,正则表达式是<h2>(.*?)</h2>,大家也可以试一下。

    等我学会了用beautifulsoup写爬虫会再放一篇文章上来的,弥补现有程序的局限性。

    如果有大神知道怎样解决上面这个问题,也请留言指点一二。

    相关文章

      网友评论

        本文标题:蜗牛爬行日记——正则表达式与第一个爬虫程序

        本文链接:https://www.haomeiwen.com/subject/ajnxtxtx.html