java从网页抓取数据(字典批量获取数据打印的默认编码()(图) )

优采云 发布时间: 2021-10-01 00:05

  java从网页抓取数据(字典批量获取数据打印的默认编码()(图)

)

  然后在第三步中,我们更改了默认编码。这取决于您要抓取的网页的编码格式。如果你不改变它,你可能会得到乱码或一些你以前没见过的字符。

  第五步,我们将抓取到的网页内容的前 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

  文件目录变化如下

  

  用浏览器打开下图

  特克斯博客

  

  百度网站

  

  至此,简单的数据采集就结束了。

  欢迎访问我的官方网站

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线