目录
一、爬虫设计的技术:
1、数据获取:
通过http获取网站的数据,如urllib,urllib2,requests等模块。
2、数据提取:
将web站点所获取的数据进行处理,获取所需要的数据,常使用的技术有:正则re,BeautifulSoup,xpath等。
3、数据存储:
将获取的数据有效的存储,常见的存储方式包括:TXT文件,csv文件,Excel,MongoDB数据库,MySQL数据库等。
备注:
本文通过requests模块获取数据,通过BeautifulSoup模块提取数据,通过csv文件存储数据。
二、分步代码展示:
0、需要引入的库:
import requests
from bs4 import BeautifulSoup
import csv
import re
import time
import datetime
import random
1、列举出需要爬虫的所有页面
# 使用列表推导式实现页码的增加,打印出来就一个包含所有网址的列表。
urls = ["https://music.douban.com/top250?start={}".format(str(i)) for i in range(0, 250, 25)]
print(urls)
执行结果如下图:
打印urls是一个列表,分别列出每页的网址,尾数是从0-250的等差为25的等差数列。
2、在每个页面抓取包含的网址信息
import requests
from bs4 import BeautifulSoup
# 模拟浏览器的headers,User-Agent用户代理
header = {'User-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}
# 抓取指定Top250排行榜页面
def get_url_music(url):
html = requests.get(url,headers=header) # 获取整个页面的信息
soup = BeautifulSoup(html.text,'lxml') # 获取数据,使用lxml引擎
a_tags = soup.find_all('a',attrs={'class':'nbg'}) # 方法选择器,提供一系列的方法。第一个参数指定节点名字,第二个参数是指定属性名字
# for a_tag in a_tags: # 循环获取整个页面中包含的网址信息,是一个列表。
# print(a_tag['herf'])
return a_tags
if __name__ == '__main__':
# 使用列表推导式实现页码的增加
urls = ["https://music.douban.com/top250?start={}".format(str(i)) for i in range(0, 250, 25)]
for url in urls:
tags_lest = get_url_music(url)
with open('musics.txt', "a") as f:
for a_tag in tags_lest:
print(a_tag)
print(a_tag['href'], type(a_tag))