欢迎访问本站,祝大家玩得愉快。

Python 爬虫的一点记录

Python kany.wang 1377℃ 0评论

背景

最近在学习Python,看到网上很多学习的例子都是从print "hello world"开始的,但是作为一个写了几个语言的“hello world”的人来说,这是不可以接受的。
所以看到python经常被用来干爬虫,好的那就搜索一番好了。搜索python爬虫有很多例子。然后就开始哐哧哐哧的写起来。

然后结果显而易见的,悲剧了。原因是python2和python3的版本是不一样的,作为一个小白来说。嗯怎么办呢?找python3的爬虫呗,或者手动来。

我不知道怎么办。好了为了让python2的能在python3上正常,有一个转换命令“惊不惊喜,意不意外”

我们使用2to3.py这个来转,这里不做详细的解释。请看后面的参考资料

环境介绍

  • 操作系统:win7 os
  • python:python 3
  • 开发工具:PyCharm Community (这个工具好像是免费的,嗯这个应该没有错还有一个Professional版本,这个收费,不要想不开哟。)

Ip代理

因为是爬虫,所以这个需要更好的伪装自己了,所以我们需要伪装下真实的Ip地址。这个忘记是哪里的资料了,代码中没有保存,所以不好意思哥们,如果哪天你看到我的这个文章,我把你的资料和版权加上去。

第一步,获取Ip地址保存

文件ip2.txt,格式如下:

127.0.0.1:8080 #相信大家明白的,这个注意是http的协议,https的不成哈,反正我用的http的

那么需要涉及到文件读取和数据存储了,代码如下:

ips = []
with open('ip2.txt', 'r') as f:
    lines = f.readlines()
    for line = in lines:
        ip_one = "http://" + line.strip()
        ips.append(ip_one)

是不是觉得上面的代码可以优化的?明确的告诉大家可以的,但是我就是这样用的,我不优化了。
指定文件读取编码格式:

open('ip2.txt' , 'r' , encoding = 'utf-8')  # 这样是不是就可以了

具体的文件操作请自行百度,这边不做详细介绍,因为我们会使用到一些的。

设置代理Ip

因为我们只能只用一个Ip去代理是不是,所以需要如下的代码实现:

single_ip_addr = random.choice(ips) # 从集合中随机拿一个,关于校验这个ip代理是否正常。这个我不验证的哟。哈哈哈哈
proxies = {'http':single_ip_addr} # 看到这里应该明白为什么我要让大家使用http的协议作为代理了吧?

requests.get(url,proxies=proxies) # 这样就配置好了

第二步,获取网页内容

这里我们使用BeautifulSoup来解析抓取回来的网页信息,关于使用BeautifulSoup的详细介绍,这里不过多阐述
代码如下:

headers = {
    'Host': 'www.baidu.com', # 这个地址嘿嘿,建议写上
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/42.0',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'Accept-Encoding': 'gzip, deflate, sdch',
    'Referer': 'http://www.baidu.com',  #这个地址有的服务器上会验证的
    'Connection': 'keep-alive',
    'Cache-Control': 'max-age=0',
}

# 定义写入文件的方法
def wirteToText(list):
    with open("images.txt","w+") as f:
        for urlOne in list:
            f.write(urlOne + "\n")

# 定义获取连接的方法
def get_img_url(url):
    single_ip_addr = random.choice(ips)
    proxies = {'http':single_ip_addr}

    list_temp = []

    try:
        res = requests.get(url,headers=headers,proxies=proxies)
        if res.status_code == 200:
            text = res.text
            Soup = BeautifulSoup(text,'lxml') # 这个地方我也不是很了解,我拿到的源码就是这样的
            results = Soup.find_all(src=re.compile("data/attachment/album/.*\.thumb\.jpg"))

            for span in results:
                list_temp.append(span["src"])

            wirteToText(list_temp)
    except:
        print(traceback.format_exc())

get_img_url(“要下载的地址”)

小结

对于这个网址抓取及基本解析就到这了,感觉怎么样?是不是没有写完,是不是文件的写还没有完成的感觉?是的是还没有,但是现在要忙,暂时就这么多,期待下一篇咯。

参考资料

PS:这些链接打不开之后请自行搞定,相信一个程序必备的动手能力还是有的。

联系方式

  • 小伙伴群:J2EE技术交流

打赏

转载请注明:懒人屋 » Python 爬虫的一点记录

喜欢 (1)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 恺哥牛逼
    tamama2017-12-23 08:52 回复