抓取网页数据(字典批量获取数据打印的默认编码()(图))
优采云 发布时间: 2022-02-14 05:22抓取网页数据(字典批量获取数据打印的默认编码()(图))
然后在第三步,我们更改了默认编码,这取决于你要爬取的网页的编码格式。如果不改的话,很有可能会出现乱码,或者一些看不见的字符。
第五步,我们将爬取的网页内容的前50个字符分配给内容供以后查看,因为网页太多,无法一次全部打印出来,所以我们决定将部分内容切片输出
最后一步,我们打印出刚刚保存的部分内容
前面只是为了提前熟悉爬取数据的步骤。接下来,我们通过列表字典批量获取数据,然后保存为文件
首先定义一个字典来存储我们要爬取的页面的URL
urls_dict = {
'特克斯博客': 'http://www.susmote.com/',
'百度': 'http://www.baidu.com',
'xyz': 'www.susmote.com',
'特克斯博客歌单区1': 'https://www.susmote.com/?cate=13',
'特克斯博客歌单区2': 'https://www.susmote.com/?cate=13'
}
然后我们在定义一个列表,里面也存储了爬取页面的URL
urls_lst = [
('特克斯博客', 'http://www.susmote.com/'),
('百度', 'http://www.baidu.com'),
('xyz', 'www.susmote.com'),
('特克斯博客歌单区1', 'https://www.susmote.com/?cate=13'),
('特克斯博客歌单区2', 'https://www.susmote.com/?cate=13')
]
然后我们先用字典来取
代码显示如下:
# 利用字典抓取
crawled_urls_for_dict = set()
for ind, name in enumerate(urls_dict.keys()):
name_url = urls_dict[name]
if name_url in crawled_urls_for_dict:
print(ind, name, "已经抓取过了.")
else:
try:
resp = requests.get(name_url)
except Exception as e:
print(ind, name, ":", str(e)[0:50])
continue
resp.encoding = "utf8"
content = resp.text
crawled_urls_for_dict.add(name_url)
with open("bydict_" + name + ".html", 'w', encoding='utf8') as f:
f.write(content)
print("抓取完成 : {} {}, 内容长度为{}".format(ind, name, len(content)))
首先定义一个空集合来保存我们已经刮过数据的URL,避免重复刮
后面我们通过for循环和枚举遍历每个字典的key和value,将每一个爬取的url存储到开头定义的set crawled_urls_for_dict中
然后我们判断要爬取的url是否已经保存在集合中,如果存在则输出已经爬取过
如果没有,请进行以下操作。这里,为了防止程序出错,影响程序的整体运行,我们使用try except语句打印错误异常,可以保证程序能够完整运行。
然后就像我之前说的,改变编码格式,暂时保存内容
只不过最后我们通过创建一个文件来保存爬取的网页文件。我不会详细解释这一点。无非就是加个后缀。
后面我们打印爬取网页的网址
for u in crawled_urls_for_dict:
print(u)
然后我们使用列表来抓取数据
代码显示如下
# 利用列表抓取
crawled_urls_for_list = set()
for ind, tup in enumerate(urls_lst):
name = tup[0]
name_url = tup[1]
if name_url in crawled_urls_for_list:
print(ind, name, "已经抓取过了.")
else:
try:
resp = requests.get(name_url)
except Exception as e:
print(ind, name, ":", str(e)[0:50])
continue
resp.encoding = "utf8"
content = resp.text
crawled_urls_for_list.add(name_url)
with open('bylist_' + name + ".html", "w", encoding='utf8') as f:
f.write(content)
print("抓取完成:{} {}, 内容长度为{}".format(ind, name, len(content)))
原理和之前的字典一样,就不过多解释了。
请注意这是一个嵌套列表,遍历时要小心
最后一样
for u in crawled_urls_for_list:
print(u)
打印抓取的数据
运行结果如下
susmotedeMacBook-Air:FirstDatamining susmote$ python main.py
抓取完成 : 0 特克斯博客, 内容长度为26793
抓取完成 : 1 百度, 内容长度为2287
2 xyz : Invalid URL 'www.susmote.com': No schema supplied.
抓取完成 : 3 特克斯博客歌单区1, 内容长度为21728
4 特克斯博客歌单区2 已经抓取过了.
http://www.susmote.com/
http://www.baidu.com
https://www.susmote.com/?cate=13
------------------------------------------------------------
抓取完成:0 特克斯博客, 内容长度为26793
抓取完成:1 百度, 内容长度为2287
2 xyz : Invalid URL 'www.susmote.com': No schema supplied.
抓取完成:3 特克斯博客歌单区1, 内容长度为21728
4 特克斯博客歌单区2 已经抓取过了.
http://www.susmote.com/
http://www.baidu.com
https://www.susmote.com/?cate=13
文件目录变化如下
用浏览器打开如下图
德州博客
百度网站
至此,简单的数据采集就结束了。
欢迎来到我的官方网站