java从网页抓取数据(字典批量获取数据打印的默认编码()(图) )
优采云 发布时间: 2021-10-01 00:05java从网页抓取数据(字典批量获取数据打印的默认编码()(图)
)
然后在第三步中,我们更改了默认编码。这取决于您要抓取的网页的编码格式。如果你不改变它,你可能会得到乱码或一些你以前没见过的字符。
第五步,我们将抓取到的网页内容的前 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存储到开头定义的集合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
文件目录变化如下
用浏览器打开下图
特克斯博客
百度网站
至此,简单的数据采集就结束了。
欢迎访问我的官方网站