爬虫的基本概念就是通过程序来模拟上网冲浪,通过获取整个页面的所有信息,然后用正则表达式或者bs4进行解析,部分获取信息。
在python中,爬虫的很多模块已经构建好了。先来看几个最基本的概念。
- url:通俗来说就是要爬取的页面,但由于有些网页是动态加载的,里面的数据不一定是由显示的网址加载的,具体得看该数据的url
- UA伪装:我们都基本上使用浏览器来浏览网页,UA就相当于一个浏览器的代号,有些服务器为了防止恶意爬虫,如果不使用UA伪装,会无法爬取该网站的数据
- 数据类型:如:text , json 和 content、这这涉及到爬取数据的类型。比如我们如果单单只爬取一整个页面,一般是一个html的text文档,而如果我们爬取的是一张图片,学过计算机的同学一定了解,图片是以二进制文件存储的。
在爬虫的开始,一般我们都会先对页面进行分析,观察数据的类型以页面的参数。比如我们来看一下搜狗翻译页面的参数
可以看到该页面抓包后,分析到数据的url,数据类型是json,json中参数data的各个值。我们可以通过修改参数来爬取相应的数据。下面来看一个简单的爬取豆瓣电影数据。
#豆瓣电影爬取
import requests
import json
if __name__ == '__main__':
url = 'https://movie.douban.com/j/chart/top_list'
#进行UA伪装的header
headers = {
"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
param = {
'type': '24',
'interval_id' : '100:90',
'action': '',
'start': '0', #从库中第几部电影开始去取
'limit' : '20' #一次取出的个数
}
#爬取网页数据
response = requests.get(url= url , params= param , headers = headers)
#将网页数据转化为json类型
list_data = response.json()
fp = open('./douban.json' , 'w' , encoding= 'utf-8')
json.dump(list_data , fp= fp , ensure_ascii= False)
print("over!!!")
先说一下文件存储的几种方式。
(1)判断有没有一个这样名字的文件,如果没有则创立。其中(./)表示当前目录,建议一般先存在当前目录,方便查找检验。
#判断是否存在一个叫file的文件夹,如果没有则创立
if not os.path.exists('./file'):
os.mkdir('./file')
(2)如果只要一次性把文件储存,可以用with open,这个方法,包含关闭文件。
with open(fileName , 'w' , encoding = 'utf-8') as fp:
fp.write(page_text)
(3)或者写成这种格式也可以
fp = open('./三国演义.txt' , 'w' , encoding='utf-8')
fp.write(title + ':' + content + '\n')
注意:使用json的dump方法存储时一定要有 ensure_ascii= False , 不然遇到中文会乱码。