第一次写爬虫,比较弱智。
在人人网看到一篇文章,题材比较敏感,感觉随时会被毙掉,于是想把文章抓下来,一共25页,每页都保存看起来又比较麻烦,所以想做个爬虫抓下来。
文章的结构比较简单,链接也是顺序的,抓取的重点就是不要把乱七八糟的东西都抓过来,省得后期处理会比较麻烦。
代码如下:
#! /user/bin/python3
# -*- coding:utf-8 -*-
from urllib.request import urlopen
from bs4 import BeautifulSoup
import os
for page in range(0,25):
if page == 0:
pageNO = "17728017217"
print(pageNO)
html = urlopen("http://blog.renren.com/share/367614280/%s"%pageNO)
bsObj = BeautifulSoup(html,"html.parser") #需要指定解析器,html.parser是python默认的解析器
for child in bsObj.find("div",{"id":"shareBody"}).children:#text-article-id
print(child)
with open('2.html', 'a', encoding='utf8') as f:
f.write(str(child))
else:
pageNO = "17728017217/%s"%page
print(pageNO)
html = urlopen("http://blog.renren.com/share/367614280/%s"%pageNO)
bsObj = BeautifulSoup(html,"html.parser") #需要指定解析器,html.parser是python默认的解析器
for child in bsObj.find("div",{"id":"shareBody"}).children:
with open('2.html', 'a', encoding='utf8') as f:
f.write(str(child))
大概说明一下:
原来的网页结构中,正文部分的div_id是"shareBody";从第二页开始,会在首页链接之后增加"/1…… ",这样一直到24页。
在保存为文件的时候,遇到了数据格式为str,而不是bytes的错误,所以在写文件的时候加上了str()来转换。
另外,创建文件时的这段代码是抄来的,"with open('2.html', 'a', encoding='utf8') as f:"如果去掉这些参数,就会提示错误。
最后,由于抓取的图片为链接,最好将保存的网页保存为pdf。