python爬虫

python爬虫主要使用了urllib,urllib2,re,cookielib这几个库

首先介绍一下如何获取网页

import urllib2
url = "http://www.baidu.com/"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()
print the_page

简单来说就是通过封装一个request发送到网站,获取网站信息。

而读取headers信息,可以直接通过response.info()获取。


有的时候我们需要先提交一个表单(比如登陆)跳转到一个页面才能爬取信息。

所以我们需要写一个发送的数据dict

value = {
    'Username' : '120511111',
    'Password' : '123456'
}
data=urllib.urlencode(value)


然后加上一些headers信息,因为有些网站不愿意别人爬取,会检查一些信息。

headers = {
    'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.94 Chrome/37.0.2062.94 Safari/537.36',
}
然后我们就可以发送表单了

req = urllib2.Request(
    url = url,
    data = data,
    headers = headers
)
当发送了数据的时候会判定这个request为POST类型,没有为GET类型。

另外,有的时候会判定cookie,所以我们可以加上以下内容

cookie = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
getdata = opener.open(req)
这样就获取了数据,之后怎么做就你啦(such as正则提取数据信息)。

实战

我根据这个,修改了一下,弄了个每天提取糗百的笑话的小爬虫。可惜不会在终端显示图片,那就先这样吧,学习一下scrapy框架吧。不断追求更懒才是coder的归宿。。。。

# qiubai.py
# -*- coding:utf-8 -*-
import urllib2
import re
import urllib
import thread
import time


class spider_mode(object):

    def __init__(self):
        self.page = 1
        self.pages = []
        self.enable = False

    def GetPage(self, page):
        my_url = "http://www.qiushibaike.com/8hr/page/" + page
        user_agent = "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/37.0.2062.94 Chrome/37.0.2062.94 Safari/537.36"
        headers = {'User-Agent': user_agent}
        req = urllib2.Request(my_url, headers=headers)
        response = urllib2.urlopen(req)
        my_page = response.read()

        myItems = re.findall(
            '<div.*?class="content".*?title="(.*?)">(.*?)</div>', my_page, re.S)
        items = []
        for item in myItems:
            items.append(
                [item[0].replace('\n', ''), item[1].replace('\n', '')])
        return items

    def loadpage(self):
        while self.enable:
            if len(self.pages) < 2:
                try:
                    my_page = self.GetPage(str(self.page))
                    self.page += 1
                    self.pages.append(my_page)
                except:
                    print "can't connect to qiubai."
            else:
                time.sleep(1)

    def showpage(self, nowPage, page):
        for item in nowPage:
            print "the %dth page" % page, item[0], item[1]

            myinput = raw_input("q?")
            if(myinput == 'q'):
                self.enable = False
                break

    def Start(self):
        self.enable = True
        page = self.page

        print "downloading ..."
        thread.start_new_thread(self.loadpage, ())

        while self.enable:
            if self.pages:
                nowPage = self.pages[0]
                del self.pages[0]
                self.showpage(nowPage, page)
                page += 1


print "please enter:"
raw_input()
mymodel = spider_mode()
mymodel.Start()








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值