由于依然无法找到更好的方法来自动的翻页,并获取每一页的网页链接,所以就是用这个比较笨拙的方法来进行网页的获取。
获取网址的代码如下:
import bs4
import re
import sys
import requests
from bs4 import BeautifulSoup
reload(sys)
sys.setdefaultencoding('utf-8')
r = requests.get('http://www.safehoo.com/Case/Case/Machine/List_44.shtml')
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html, 'html.parser')
res_url = r"(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')" # 1*
all_a_tag = soup.find_all('a')
link = re.findall(res_url, str(all_a_tag), re.I)
for i in link:
print i
该段代码获取一个案例列表网页中所有安全事故案例的链接网址。
然后用下面的代码下载安全事故并存入文件:
# __*__ encoding:utf-8 __*__
import bs4
import re
import sys
import requests
from bs4 import BeautifulSoup
reload(sys)
sys.setdefaultencoding('utf-8')
f = open('C:\Users\Administrator\Desktop\electric_urls.txt','r')
urls = f.readlines() # 2*
for url in urls:
r = requests.get('http://www.safehoo.com' + url.strip('\n'))
r.encoding = r.apparent_encoding
html = r.text
soup = BeautifulSoup(html, 'html.parser')
event = soup.find_all('p')
safevent = str(event[1:])
file = 'C:\Users\Administrator\Desktop\safe_event.txt'
fo = open(file,'ab+') # 3*
fo.write(safevent.decode("unicode_escape"))
fo.close()
只记录需要注意或需要继续学习的几个地方:
1* 正则表达式,这个正则表达式是来源于网上,是用于匹配出 'a' 标签中的网页连接,但是该正则表达式并不完美,会匹配出很多并不需要的内容,所以以后在继续学习正则表达式之后,要对其进行修改;
2* 按行读取文件中的内容时,要知道读取出来的内容是列表类型的。在以后的学习过程中要注意数据类型的问题;
3* 文件读写,要专门进行学习。
另外,今天为了为以后进行文本挖掘进行准备,进行了Python2.7和 win7平台上的wordcloud库的安装,为了以后能够进行词云的绘制,wordcloud库之后也要专门的学习。在安装wordcloud库的过程中遇到了安装问题。最后以以下措施解决:
1.使用 python -m pip install --upgrade pip 语句对pip进行更新
2.安装pip install wheel
3. 找到正确的版本