零基础写python爬虫之抓取糗事百科代码分享,python爬虫

by admin on 2019年9月5日

/**

quanwei9958 转自 python
爬虫抓取心得分享

零基础写python爬虫之抓取糗事百科代码分享,python爬虫

项目内容:

用Python写的糗事百科的网络爬虫。

使用方法:

新建一个Bug.py文件,然后将代码复制到里面后,双击运行。

程序功能:

在命令提示行中浏览糗事百科。

原理解释:

首先,先浏览一下糗事百科的主页:
可以看出来,链接中page/后面的数字就是对应的页码,记住这一点为以后的编写做准备。
然后,右击查看页面源码:

图片 1

观察发现,每一个段子都用div标记,其中class必为content,title是发帖时间,我们只需要用正则表达式将其“扣”出来就可以了。
明白了原理之后,剩下的就是正则表达式的内容了,可以参照这篇文章:

运行效果:

图片 2

复制代码 代码如下:

# -*- coding: utf-8 -*-   
    
import urllib2   
import urllib   
import re   
import thread   
import time     
#———– 加载处理糗事百科 ———–   
class Spider_Model:   
       
    def __init__(self):   
        self.page = 1   
        self.pages = []   
        self.enable = False   
   
    # 将所有的段子都扣出来,添加到列表中并且返回列表   
    def GetPage(self,page):   
        myUrl = “” + page   
        user_agent = ‘Mozilla/4.0 (compatible; MSIE 5.5; Windows
NT)’  
        headers = { ‘User-Agent’ : user_agent }  
        req = urllib2.Request(myUrl, headers = headers)  
        myResponse = urllib2.urlopen(req) 
        myPage = myResponse.read()   
        #encode的作用是将unicode编码转换成其他编码的字符串   
        #decode的作用是将其他编码的字符串转换成unicode编码   
        unicodePage = myPage.decode(“utf-8”)   
   
        # 找出所有class=”content”的div标记   
        #re.S是任意匹配模式,也就是.可以匹配换行符   
        myItems =
re.findall(‘<div.*?class=”content”.*?title=”(.*?)”>(.*?)</div>’,unicodePage,re.S)   
        items = []   
        for item in myItems:   
            # item 中第一个是div的标题,也就是时间   
            # item 中第二个是div的内容,也就是内容   
           
items.append([item[0].replace(“\n”,””),item[1].replace(“\n”,””)])   
        return items   
   
    # 用于加载新的段子   
    def LoadPage(self):   
        # 如果用户未输入quit则一直运行   
        while self.enable:   
            # 如果pages数组中的内容小于2个   
            if len(self.pages) < 2:   
                try:   
                    # 获取新的页面中的段子们   
                    myPage = self.GetPage(str(self.page))   
                    self.page += 1   
                    self.pages.append(myPage)   
                except:   
                    print ‘无法链接糗事百科!’   
            else:   
                time.sleep(1)   
           
    def ShowPage(self,nowPage,page):   
        for items in nowPage:   
            print u’第%d页’ % page , items[0]  , items[1]   
            myInput = raw_input()   
            if myInput == “quit”:   
                self.enable = False   
                break   
           
    def Start(self):   
        self.enable = True   
        page = self.page   
   
        print u’正在加载中请稍候……’   
           
        # 新建一个线程在后台加载段子并存储   
        thread.start_new_thread(self.LoadPage,())   
           
        #———– 加载处理糗事百科 ———–   
        while self.enable:   
            # 如果self的page数组中存有元素   
            if self.pages:   
                nowPage = self.pages[0]   
                del self.pages[0]   
                self.ShowPage(nowPage,page)   
                page += 1   
    
#———– 程序的入口处 ———–   
print u””” 
————————————— 
   程序:糗百爬虫 
   版本:0.3 
   作者:why 
   日期:2014-06-03 
   语言:Python 2.7 
   操作:输入quit退出阅读糗事百科 
   功能:按下回车依次浏览今日的糗百热点 
————————————— 
“”” 
print u’请按下回车浏览今日的糗百内容:’   
raw_input(‘ ‘)   
myModel = Spider_Model()   
myModel.Start()   

Q&A:
1.为什么有段时间显示糗事百科不可用?
答:前段时间因为糗事百科添加了Header的检验,导致无法爬取,需要在代码中模拟Header。现在代码已经作了修改,可以正常使用。

2.为什么需要单独新建个线程?
答:基本流程是这样的:爬虫在后台新起一个线程,一直爬取两页的糗事百科,如果剩余不足两页,则再爬一页。用户按下回车只是从库存中获取最新的内容,而不是上网获取,所以浏览更顺畅。也可以把加载放在主线程,不过这样会导致爬取过程中等待时间过长的问题。

python 爬虫抓取亚马逊数据,python爬虫

朋友说爬当当和京东和容易,我没有去爬取过,因此不好评论。但是亚马逊确实是下了些反扒功夫的。可能我们写着好好的代码运行运行着就返回不了正确结果了。

 

可以参考:

亚马逊是如何反爬虫的?

 

如果我们在请求时带上一个变化着的header,成功率就能大大的增加了

headers = randHeader()
rHtml = requests.get(url, headers=headers, timeout=20)
...

之后可以使用PyQuery 来进行html解析抓取元素

图片 3

 1 #生成随机头
 2 def randHeader():
 3     head_connection = ['Keep-Alive', 'close']
 4     head_accept = ['text/html, application/xhtml+xml, */*']
 5     head_accept_language = ['zh-CN,fr-FR;q=0.5', 'en-US,en;q=0.8,zh-Hans-CN;q=0.5,zh-Hans;q=0.3']
 6     head_user_agent = ['Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
 7                        'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36',
 8                        'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; rv:11.0) like Gecko)',
 9                        'Mozilla/5.0 (Windows; U; Windows NT 5.2) Gecko/2008070208 Firefox/3.0.1',
10                        'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070309 Firefox/2.0.0.3',
11                        'Mozilla/5.0 (Windows; U; Windows NT 5.1) Gecko/20070803 Firefox/1.5.0.12',
12                        'Opera/9.27 (Windows NT 5.2; U; zh-cn)',
13                        'Mozilla/5.0 (Macintosh; PPC Mac OS X; U; en) Opera 8.0',
14                        'Opera/8.0 (Macintosh; PPC Mac OS X; U; en)',
15                        'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.12) Gecko/20080219 Firefox/2.0.0.12 Navigator/9.0.0.6',
16                        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0)',
17                        'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)',
18                        'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E)',
19                        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/4.0.6.2000 Chrome/26.0.1410.43 Safari/537.1 ',
20                        'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; QQBrowser/7.3.9825.400)',
21                        'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0 ',
22                        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.92 Safari/537.1 LBBROWSER',
23                        'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; BIDUBrowser 2.x)',
24                        'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/3.0 Safari/536.11']
25 
26     header = {
27         'Connection': head_connection[0],
28         'Accept': head_accept[0],
29         'Accept-Language': head_accept_language[1],
30         'User-Agent': head_user_agent[random.randrange(0, len(head_user_agent))]
31     }
32     return header

View Code

爬虫抓取亚马逊数据,python爬虫
朋友说爬当当和京东和容易,我没有去爬取过,因此不好评论。但是亚马逊确实是下了些反扒功夫的…

零基础写python爬虫之抓取百度贴吧代码分享,python爬虫

这里就不给大家废话了,直接上代码,代码的解释都在注释里面,看不懂的也别来问我,好好学学基础知识去!

复制代码 代码如下:

# -*- coding: utf-8 -*-
#—————————————
#   程序:百度贴吧爬虫
#   版本:0.1
#   作者:why
#   日期:2013-05-14
#   语言:Python 2.7
#  
操作:输入带分页的地址,去掉最后面的数字,设置一下起始页数和终点页数。
#   功能:下载对应页码内的所有页面并存储为html文件。
#—————————————
import string, urllib2
#定义百度函数
def baidu_tieba(url,begin_page,end_page):  
    for i in range(begin_page, end_page+1):
        sName = string.zfill(i,5) + ‘.html’#自动填充成六位的文件名
        print ‘正在下载第’ + str(i) + ‘个网页,并将其存储为’ + sName +
‘……’
        f = open(sName,’w+’)
        m = urllib2.urlopen(url + str(i)).read()
        f.write(m)
        f.close()
#——– 在这里输入参数 ——————
# 这个是山东大学的百度贴吧中某一个帖子的地址
#bdurl = ”
#iPostBegin = 1
#iPostEnd = 10

bdurl = str(raw_input(u’请输入贴吧的地址,去掉pn=后面的数字:\n’))
begin_page = int(raw_input(u’请输入开始的页数:\n’))
end_page = int(raw_input(u’请输入终点的页数:\n’))
#——– 在这里输入参数 ——————
#调用
baidu_tieba(bdurl,begin_page,end_page)

以上就是python抓取百度贴吧的一段简单的代码,非常的实用吧,各位可以自行扩展下。

author: insun

urllib.quote(‘要编码的字符串’)
如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用:

爬虫程序利用python中的正则怎实现抓取静态网页源码中的id号与id内容

我只看见了ID号,没有看见ID内容啊,在哪里?
提取ID号的话,正则是ID-\d+-\d+
 

爬虫程序利用python中的正则怎实现抓取静态网页源码中的id号与id内容

我只看见了ID号,没有看见ID内容啊,在哪里?
提取ID号的话,正则是ID-\d+-\d+
 

title:python 爬虫抓取心得分享

urllib.quote(‘要编码的字符串’)

怎用python实现爬虫抓取网页时自动翻页

url=“search.jiayuan.com/…ajax=1”

data={‘p’:页码}
用post方法提交
 

项目内容: 用Python写的糗事百科的网络爬虫。 使用方法:
新建一个Bug.py文件,然后…

怎在scrapy框架下,用python实现爬虫自动跳转页面来抓去网页内容?

爬虫跟踪下一页的方法是自己模拟点击下一页连接,然后发出新的请求。请看:
item1 = Item()yield item1item2 = Item()yield item2req =
Request(url=’下一页的链接’, callback=self.parse)yield req
注意使用yield时不要用return语句。

 

这里就不给大家废话了,直接上代码,代码的解释都在注释里面,看不懂的也别来问…

blog:

 

**/   

query =  urllib.quote(singername)
    url = 'http://music.baidu.com/search?key='+query
    response = urllib.urlopen(url)
    text = response.read()

0x1.urllib.quote(‘要编码的字符串’)

 

如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用:

get or post  urlencode

urllib.quote(‘要编码的字符串’)

如果在GET需要一些参数的话,那我们需要对传入的参数进行编码。

 

 

    query =  urllib.quote(singername)

import urllib
def url_get():
    import urllib
    params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
    f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query?%s" % params)
    print f.read()

def url_post():
    import urllib
    params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
    f = urllib.urlopen("http://www.musi-cal.com/cgi-bin/query", params)
    print f.read()

    url = ‘

urllib urllib2 proxy 代理

    response = urllib.urlopen(url)

如果你请求对方的网页,确不想被封IP的话,这个时候就要用到代理了,其实用
urllib 代理还是比较简单的:

    text = response.read()

import urllib
def url_proxy():
    proxies = {'http':'http://211.167.112.14:80'}#或者proxies = {'':'211.167.112.14:80'}
    opener = urllib.FancyURLopener(proxies)
    f = opener.open("http://www.dianping.com/shanghai")
    print f.read()

 

只用一个代理IP的话
有时候弄巧成拙了 恰好被大众点评给检测出来了
401
211.167.112.14
python-urllib/1.17

 

图片 4

0x2. get or post  urlencode

那么就试试多个IP代理

如果在GET需要一些参数的话,那我们需要对传入的参数进行编码。

import urllib
def url_proxies():
    proxylist = (
            '211.167.112.14:80',
            '210.32.34.115:8080',
            '115.47.8.39:80',
            '211.151.181.41:80',
            '219.239.26.23:80',
            )
    for proxy in proxylist:
        proxies = {'': proxy}
        opener = urllib.FancyURLopener(proxies)
        f = opener.open("http://www.dianping.com/shanghai")
        print f.read()

 

这回没问题了。

import urllib

有的时候要模拟浏览器
,不然做过反爬虫的网站会知道你是robot
例如针对浏览器的限制我们可以设置User-Agent头部,针对防盗链限制,我们可以设置Referer头部

def url_get():

有的网站用了Cookie来限制,主要是涉及到登录和限流,这时候没有什么通用的方法,只能看能否做自动登录或者分析Cookie的问题了。

    import urllib

仅仅是模拟浏览器访问依然是不行的,如果爬取频率过高依然会令人怀疑,那么就需要用到上面的代理设置了

    params = urllib.urlencode({‘spam’: 1, ‘eggs’: 2, ‘bacon’: 0})

 

    f = urllib.urlopen(“” %
params)

import urllib2
def url_user_agent(url):
    '''
    proxy = 'http://211.167.112.14:80'
    opener = urllib2.build_opener(urllib2.ProxyHandler({'http':proxy}), urllib2.HTTPHandler(debuglevel=1))
    urllib2.install_opener(opener)
    '''
    i_headers = {"User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5",\
                 "Referer": 'http://www.dianping.com/'}
    req = urllib2.Request(url, headers=i_headers)

    return urllib2.urlopen(req).read()

#print url_user_agent('http://www.dianping.com/shanghai')

    print f.read()

 

 

 就算设置了代理,代理的ip也有可能被封,还有另外一种终极的办法来防止被封,那便是使用time库的sleep()函数。

def url_post():

 

    import urllib

import time
for i in range(1,10):
    ....#抓取逻辑
    time.sleep(5)

    params = urllib.urlencode({‘spam’: 1, ‘eggs’: 2, ‘bacon’: 0})

 

    f = urllib.urlopen(“”, params)

抓的地址是
直接抓
反而达不到效果
header:
Location: /citylist

    print f.read()

 

 

图片 5图片 6

0x3.urllib urllib2 proxy 代理

供一段代理IP
proxylist = (
            '211.167.112.14:80',
            '210.32.34.115:8080',
            '115.47.8.39:80',
            '211.151.181.41:80',
            '219.239.26.23:80',
            '219.157.200.18:3128',
            '219.159.105.180:8080',
            '1.63.18.22:8080',
            '221.179.173.170:8080',
            '125.39.66.153:80',
            '125.39.66.151:80',
            '61.152.108.187:80',
            '222.217.99.153:9000',
            '125.39.66.146:80',
            '120.132.132.119:8080',
            '119.7.221.137:82',
            '117.41.182.188:8080',
            '202.116.160.89:80',
            '221.7.145.42:8080',
            '211.142.236.131:80',
            '119.7.221.136:80',
            '211.151.181.41:80',
            '125.39.66.131:80',
            '120.132.132.119:8080',
            '112.5.254.30:80',
            '106.3.98.82:80',
            '119.4.250.105:80',
            '123.235.12.118:8080',
            '124.240.187.79:80',
            '182.48.107.219:9000',
            '122.72.2.180:8080',
            '119.254.90.18:8080',
            '124.240.187.80:83',
            '110.153.9.250:80',
            '202.202.1.189:80',
            '58.67.147.205:8080',
            '111.161.30.228:80',
            '122.72.76.130:80',
            '122.72.2.180:80',
            '202.112.113.7:80',
            '218.108.85.59:81',
            '211.144.72.154:80',
            '119.254.88.53:8080',
            '121.14.145.132:82',
            '114.80.149.183:80',
            '111.161.30.239:80',
            '182.48.107.219:9000',
            '122.72.0.28:80',
            '125.39.68.131:80',
            '118.244.190.6:80',
            '120.132.132.119:88',
            '211.167.112.15:82',
            '221.2.80.126:8888',
            '219.137.229.214:3128',
            '125.39.66.131:80',
            '61.181.22.157:80',
            '115.25.216.6:80',
            '119.7.221.137:82',
            '221.195.42.195:8080',
            '119.254.88.53:8080',
            '219.150.254.158:8080',
            '113.9.163.101:8080',
            '222.89.154.14:9000',
            '114.141.162.53:8080',
            '218.5.74.199:3128',
            '61.152.108.187:80',
            '218.76.159.133:80',
            '59.34.57.88:8080',
            '118.244.190.34:80',
            '59.172.208.189:8080',
            '116.236.216.116:8080',
            '111.161.30.233:80',
            '220.248.237.234:8080',
            '121.14.145.132:82',
            '202.114.205.125:8080'
            )

如果你请求对方的网页,确不想被封IP的话,这个时候就要用到代理了,其实用urllib代理还是比较简单的:

View Code

import urllib

 

def url_proxy():

Proxy的使用相当广泛,对于单个应用来说,爬虫是很容易被封禁,如果使用Proxy模式,就能降低被封的风险,所以有需求的同学需要仔细看下Python urllib2对于Proxy的使用:

    proxies = {‘http’:’ =
{”:’211.167.112.14:80′}

 

    opener = urllib.FancyURLopener(proxies)

 

    f = opener.open(“”)

 

    print f.read()

抓取下拉加载或者点击加载的页面方法:

只用一个代理IP的话 有时候弄巧成拙了 恰好被大众点评给检测出来了

加载中的内容应该是ajax请求的,对付ajax请求没有什么好的办法,只有抓取页面的JS,分析JS进行抓取

401

解决方案:

211.167.112.14

1.傻傻的全部下拉完
全部点击加载完(对少量数据还行,大量数据的站去死吧)
在Firefox里面copy出源码信息 进
行正则匹配
    2.HttpFox抓包  直接抓ajax地址的数据  分析ajax链接 变换参数 
取得json后再正则

python-urllib/1.17

0x5.正则处理

图片 7

python对正则表达式的支持模块。如果http库有选择的余地外,re几乎是没有选择余地的工具。因为有正则表达式的存在,所以让我们可以很灵活的去抠取抓取过来的完整html中所需要的部分。

 那么就试试多个IP代理

当然,这篇文章不会详细解释正则表达式,因为如果要系统的介绍正则表达式,或许可以写一本书了。这里只简单提一下我们后面会用到的python正则表达式的用法。

import urllib

re.compile()。如果正则表达式比较多,请一
定要先用这个方法先行编译正则表达式,之后再正则表达式的使用就会很非常快,因为大家都知道,python文件在第一次运行会分别创建一个字节码文件,如
果正则表达式作为字符串的时候,在运行时才会被编译,是会影响到python的执行速度的。

def url_proxies():

compile()返回的是一个re对象,该对象拥有re库的search(), match(),
findall()等方法,这三个方法,在后面会被频繁的用到,生成被编译的re对象还有一个好处是调用方法不用再传入字符串的正则表达式。

    proxylist = (

search()主要用来校验正则表达式能否匹配字符串中的一段,通常用来判断该页面是否有我需要的内容。

            ‘211.167.112.14:80’,

            ‘210.32.34.115:8080’,

match()用来判断字符串是否完全被一个正则表达式匹配,后面用的比较少。

            ‘115.47.8.39:80’,

            ‘211.151.181.41:80’,

findall()用来搜索正则表达式在字符串中的所有匹配,并返回一个列表,如果没有任何匹配,则返回一个空列表。

            ‘219.239.26.23:80’,

            )

带有子组的正则表达式,findall()返回的列表中的每个元素为一个元组,正则表达式中有几个子组,元组中就会有几个元素,第一个元素为第一个括号中的子组匹配到的元素,以此类推。

    for proxy in proxylist:

findall()和search()是有类似之处的,都是搜索正则表达式在字符串中的匹配,但是findall()返回一个列表,search()返回一个匹配对象,而且findall()返回的列表中有所有匹配,而search()只返回第一个匹配的匹配对象。

        proxies = {”: proxy}

0x6.Reference:

python urllib下载网页
http://www.cnpythoner.com/post/pythonurllib.html

关于不得不在python中使用代理访问网络的方法
http://blogread.cn/it/wap/article/1967

python使用urllib2抓取防爬取链接
http://www.the5fire.net/python-urllib2-crawler.html

Python实战中阶(一)——爬取网页的一点分享
http://blog.goodje.com/2012-08/python-middle-action-web-crawler.html

Python Urllib2使用:代理及其它
http://isilic.iteye.com/blog/1806403

Python urllib2递归抓取某个网站下图片 
http://blog.csdn.net/wklken/article/details/7364899

用Python抓网页的注意事项
http://blog.raphaelzhang.com/2012/03/issues-in-python-crawler/

urllib.urlretrieve下载图片速度很慢 + 【已解决】给urllib.urlretrieve添加user-agent
http://www.crifan.com/use_python_urllib-

urlretrieve_download_picture_speed_too_slow_add_user_agent_for_urlretrieve/

        opener = urllib.FancyURLopener(proxies)

 

        f = opener.open(“”)

        print f.read()

这回没问题了。

 

有的时候要模拟浏览器 ,不然做过反爬虫的网站会知道你是robot

例如针对浏览器的限制我们可以设置User-Agent头部,针对防盗链限制,我们可以设置Referer头部

有的网站用了Cookie来限制,主要是涉及到登录和限流,这时候没有什么通用的方法,只能看能否做自动登录或者分析Cookie的问题了。

 

仅仅是模拟浏览器访问依然是不行的,如果爬取频率过高依然会令人怀疑,那么就需要用到上面的代理设置了

import urllib2

def url_user_agent(url):

    ”’

    proxy = ”

    opener = urllib2.build_opener(urllib2.ProxyHandler({‘http’:proxy}),
urllib2.HTTPHandler(debuglevel=1))

    urllib2.install_opener(opener)

    ”’

    i_headers = {“User-Agent”: “Mozilla/5.0 (Windows; U; Windows NT
5.1; zh-CN; rv:1.9.1) Gecko/20090624 Firefox/3.5”,\

                 “Referer”: ‘

    req = urllib2.Request(url, headers=i_headers)

 

    return urllib2.urlopen(req).read()

 

#print url_user_agent(”)

 就算设置了代理,代理的ip也有可能被封,还有另外一种终极的办法来防止被封,那便是使用time库的sleep()函数。

import time

for i in range(1,10):

    ….#抓取逻辑

    time.sleep(5)

 

 

 

抓的地址是

直接抓 反而达不到效果

header: Location: /citylist

 

提供一段代理IP

proxylist = (

            ‘211.167.112.14:80’,

            ‘210.32.34.115:8080’,

            ‘115.47.8.39:80’,

            ‘211.151.181.41:80’,

            ‘219.239.26.23:80’,

            ‘219.157.200.18:3128’,

            ‘219.159.105.180:8080’,

            ‘1.63.18.22:8080’,

            ‘221.179.173.170:8080’,

            ‘125.39.66.153:80’,

            ‘125.39.66.151:80’,

            ‘61.152.108.187:80’,

            ‘222.217.99.153:9000’,

            ‘125.39.66.146:80’,

            ‘120.132.132.119:8080’,

            ‘119.7.221.137:82’,

            ‘117.41.182.188:8080’,

            ‘202.116.160.89:80’,

            ‘221.7.145.42:8080’,

            ‘211.142.236.131:80’,

            ‘119.7.221.136:80’,

            ‘211.151.181.41:80’,

            ‘125.39.66.131:80’,

            ‘120.132.132.119:8080’,

            ‘112.5.254.30:80’,

            ‘106.3.98.82:80’,

            ‘119.4.250.105:80’,

            ‘123.235.12.118:8080’,

            ‘124.240.187.79:80’,

            ‘182.48.107.219:9000’,

            ‘122.72.2.180:8080’,

            ‘119.254.90.18:8080’,

            ‘124.240.187.80:83’,

            ‘110.153.9.250:80’,

            ‘202.202.1.189:80’,

            ‘58.67.147.205:8080’,

            ‘111.161.30.228:80’,

            ‘122.72.76.130:80’,

            ‘122.72.2.180:80’,

            ‘202.112.113.7:80’,

            ‘218.108.85.59:81’,

            ‘211.144.72.154:80’,

            ‘119.254.88.53:8080’,

            ‘121.14.145.132:82’,

            ‘114.80.149.183:80’,

            ‘111.161.30.239:80’,

            ‘182.48.107.219:9000’,

            ‘122.72.0.28:80’,

            ‘125.39.68.131:80’,

            ‘118.244.190.6:80’,

            ‘120.132.132.119:88’,

            ‘211.167.112.15:82’,

            ‘221.2.80.126:8888’,

            ‘219.137.229.214:3128’,

            ‘125.39.66.131:80’,

            ‘61.181.22.157:80’,

            ‘115.25.216.6:80’,

            ‘119.7.221.137:82’,

            ‘221.195.42.195:8080’,

            ‘119.254.88.53:8080’,

            ‘219.150.254.158:8080’,

            ‘113.9.163.101:8080’,

            ‘222.89.154.14:9000’,

            ‘114.141.162.53:8080’,

            ‘218.5.74.199:3128’,

            ‘61.152.108.187:80’,

            ‘218.76.159.133:80’,

            ‘59.34.57.88:8080’,

            ‘118.244.190.34:80’,

            ‘59.172.208.189:8080’,

            ‘116.236.216.116:8080’,

            ‘111.161.30.233:80’,

            ‘220.248.237.234:8080’,

            ‘121.14.145.132:82’,

            ‘202.114.205.125:8080’

            )

 

 

Proxy的使用相当广泛,对于单个应用来说,爬虫是很容易被封禁,如果使用Proxy模式,就能降低被封的风险,所以有需求的同学需要仔细看下Python
urllib2对于Proxy的使用:

 

0x4.抓取下拉加载或者点击加载的页面方法:

 

加载中的内容应该是ajax请求的,对付ajax请求没有什么好的办法,只有抓取页面的JS,分析JS进行抓取

 

解决方案:

1.傻傻的全部下拉完 全部点击加载完(对少量数据还行,大量数据的站去死吧)
在Firefox里面copy出源码信息 进

行正则匹配

    2.HttpFox抓包  直接抓ajax地址的数据  分析ajax链接 变换参数
 取得json后再正则

 

0x5.正则处理

python对正则表达式的支持模块。如果http库有选择的余地外,re几乎是没有选择余地的工具。因为有正则表达式的存在,所以让我们可以很灵活的去抠取抓取过来的完整html中所需要的部分。

 

当然,这篇文章不会详细解释正则表达式,因为如果要系统的介绍正则表达式,或许可以写一本书了。这里只简单提一下我们后面会用到的python正则表达式的用法。

 

re.compile()。如果正则表达式比较多,请一
定要先用这个方法先行编译正则表达式,之后再正则表达式的使用就会很非常快,因为大家都知道,python文件在第一次运行会分别创建一个字节码文件,如
果正则表达式作为字符串的时候,在运行时才会被编译,是会影响到python的执行速度的。

 

 

 

compile()返回的是一个re对象,该对象拥有re库的search(), match(),
findall()等方法,这三个方法,在后面会被频繁的用到,生成被编译的re对象还有一个好处是调用方法不用再传入字符串的正则表达式。

 

search()主要用来校验正则表达式能否匹配字符串中的一段,通常用来判断该页面是否有我需要的内容。

 

 

 

match()用来判断字符串是否完全被一个正则表达式匹配,后面用的比较少。

 

 

 

findall()用来搜索正则表达式在字符串中的所有匹配,并返回一个列表,如果没有任何匹配,则返回一个空列表。

 

 

 

带有子组的正则表达式,findall()返回的列表中的每个元素为一个元组,正则表达式中有几个子组,元组中就会有几个元素,第一个元素为第一个括号中的子组匹配到的元素,以此类推。

 

findall()和search()是有类似之处的,都是搜索正则表达式在字符串中的匹配,但是findall()返回一个列表,search()返回一个匹配对象,而且findall()返回的列表中有所有匹配,而search()只返回第一个匹配的匹配对象。

 

0x6.Reference:

 

python urllib下载网页

 

关于不得不在python中使用代理访问网络的方法

 

python使用urllib2抓取防爬取链接

 

Python实战中阶(一)——爬取网页的一点分享

 

Python Urllib2使用:代理及其它

 

Python urllib2递归抓取某个网站下图片 

 

用Python抓网页的注意事项

 

urllib.urlretrieve下载图片速度很慢 +
【已解决】给urllib.urlretrieve添加user-agent

 

urlretrieve_download_picture_speed_too_slow_add_user_agent_for_urlretrieve/

author: insun title:python
爬虫抓取心得分享
blog:
**/ 0x1.urllib.quote(要编码的字符串) 如果…

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图