程序员@IT·互联网

安静地做只小爬虫~

2017-05-30  本文已影响0人  idealclover

起因

自己的电商课要做关于名医主刀的pre
说到pre就难免要各种搜索,然而自己实在太懒
正巧最近学了点爬虫的东西但是不会用,也算实战一下
而且是假期还没什么事情做,那就开动咯

免责声明

自己做爬虫也只是想简单地试试,不仅设置了时间上的暂停(一页三秒),而且在实际使用时也只是爬了三四页。

在百度等部分搜索引擎的robots.txt文件中禁止或了爬虫行为,代码中不透露相关信息(当然如果想找怎么也能找到)

如出现任何侵权行为与本文作者无关,特此声明

拟定需求

1.0版本

最开始爬虫没想包括封装啊函数啊那么多,就是想单纯地实现它
网上介绍爬虫的blog太多了,重点介绍下愚蠢的某翠踩过的坑

import requests
from bs4 import BeautifulSoup
import os

创建输出文件

if not os.path.exists('data'):
        os.mkdir('data')
filename='data\\data.txt'
fp = open(filename, 'wb')
if not fp:
    print('文件打开失败')

实现寻找和输出

n = 0    #总获取条数
while(n < 80):
    r = requests.get('//某地址//')
    soup = BeautifulSoup(r.text, 'lxml')
    n += 20    #20条一页
    
    #以下内容因网站不同而不同
    for item in soup.findAll("div", {"class": "result"}):
        a_click = item.find('a')
        #标题
        if a_click:
            fp.write(a_click.get_text().encode('utf-8'))
        fp.write(b'#')
        #链接
        if a_click:
            fp.write(a_click.get("href").encode('utf-8'))
        fp.write(b'#')
        #摘要
        c_abstract=item.find("div", {"class": "c-summary c-row "})
        if c_abstract:
            strtmp=c_abstract.get_text()
            fp.write(strtmp.encode('utf-8'))
        #带图片的摘要
        else:
            c_abstract=item.find("div", {"c-span18 c-span-last"})
            strtmp=c_abstract.get_text()
            fp.write(strtmp.encode('utf-8'))
        fp.write(b'#')
        fp.write('\r\n'.encode('utf-8'))
fp.close()

2.0版本

原版本缺点

import requests
from bs4 import BeautifulSoup
import time
import os

get_result(key_words, pagenum)函数

def get_result(key_words, pagenum):
    headers = {'User-Agent' : //某 user agent//}
    url = (//某//+ key_words +//链//+ str(pagenum * 20) + //接//)
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'lxml')
    return soup

deal_data(key_words, pagenum)函数

def deal_news(key_words, pagenum):

    if not os.path.exists('data'):
        os.mkdir('data')
    filename = 'data\\' + key_words + '.txt'
    fp = open(filename, 'wb')
    if not fp:
        print('文件打开失败')

    n = 0
    while(n < pagenum):
        print("working...(page " + str(n+1) + "/" + str(pagenum) + ")")
        soup = get_result(key_words, n)
        n += 1
        #获取部分同上
        time.sleep(3)
    fp.close()
    print("success!")

测试函数

if __name__ == "__main__":
    keywords = input("You keywords?")
    while True:
        try:
            num = input("How many pages do you want? ")
            num = int(num)
            break
        except ValueError:
            print('Please input an *integer*')
    deal_data(keywords, num)

后记

原理掌握了之后又兴致勃勃地换了几个网站
不过这还只是很初级的爬虫了~
等待以后能变得更厉害~

上一篇下一篇

猜你喜欢

热点阅读