搜索
您的当前位置:首页正文

「Spider」爬取A坛资源链接

来源:二三娱乐

嗯……之前用Scrapy写过一个,并且成功爬了下来,奈何效率低下而且配置蛋疼,今天在网易云课堂看到不错的教程,用他现成的代码改了下,竟也运行成功,而且效率高了不少。在此Mark下,方便以后参考。

因为论坛限制搜索时间在一年以内,为了方便本地查找资源,因此目标为保存所有的专辑及链接到一个HTML中。

思路很简单,首先打开网页,筛选需要抓取的数据(链接、标题),保存浏览器的Cookies及User-Agent到一个Dict里,用requests库加上之前的User-Agent下载网页,使用BeautifunSoup解析后,调试CSS Selector到能够准确指向所需信息,然后将专辑及对应的链接分别放置在一个Dict里,处理输出即可。

from bs4 import BeautifulSoup
import requests
import time

#定义需要爬取的页面及headers
url = 'https://hostname/bbs/thread.php?fid=fid&page=1'
urls = ['https://hostname/bbs/thread.php?fid=fid&page={}'.format(str(i)) for i in range(start,end,step)]
headers = {
    'User-Agent':'',
    'Cookie':''
}

#爬取专辑信息
def getAlbumInfo(url,data=None):
    wb_data = requests.get(url,headers=headers)
    time.sleep(4)
    soup = BeautifulSoup(wb_data.text,'lxml')
    titles    = soup.select('tr.t_one > td > h3 > a')
    links     = soup.select('tr.t_one > td > h3 > a')
    data = []
    if data == []:
        for titles,links in zip(titles,links):
            datas = {
                'title'  :titles.get_text(),
                'link'  :links.get('href'),
                }
            data.append(datas)
    print(data)
    return data

#遍历爬取结果及输出为HTML链接
def dataProcessAndWriteToFile(result):
    for links in result:
        url = '<a '+'href=https://hostname/bbs/'+str(links['link'])+'>'+str(links['title'])+'</a>'+'</br>'
        print(url)
        f = open('output.html','a',encoding='utf-8')
        f.write(url)
        f.close()

#执行
for url in urls:
    current = getAlbumInfo(url)
    dataProcessAndWriteToFile(current)
Top