php抓取网页匹配url(从网上用wget工具下载的各种网页源码文件)
优采云 发布时间: 2022-03-01 10:07php抓取网页匹配url(从网上用wget工具下载的各种网页源码文件)
这个东西其实是最基本的东西,但是也遇到了很多坑,这里记录如下。
此时,我手头有各种网页。用wget工具从网上下载的各种网页的源文件多为html文件,部分为php等,可以用html格式打开。
为了提出网页中的所有信息创建图表,为以后的数据挖掘做准备。了解了目的之后,首先和其他爬虫有点不同的是,有一个网页源代码。保存下载链接
第一步是使用python打开网页的源代码
这里面我使用了一个很好用的库,beautifulsoup工具,此工具的下载和安装,网上有很多教程,基于bs4,另外我发现在pycharm中你点取改正之后的import也可以直接下载这些包,免去在cmd里面pip install。
还有一个问题:因为当时我正在处理的路径名和下载的html文件中有空格,所以这个时候遇到了问题。如果我在后处理词向量中使用空格进行字符分割,我会遇到很大的麻烦。 ,所以为了保证文本字符符合要求,首先遍历数据集中的所有文件和目录,替换掉其中所有的空格字符。 x.replace(' ',")
,这下真是醉了,中午终于解决了,速度够慢,然后卡在183错误上半天。 (昨天写的这里没有保存)清理文件名和文件夹名空格时遇到错误,显示error183。仔细检查后应该会出现系统错误,比如一个文件夹中有两个文件,一个文件是w(2).html,另一个文件是w(2).html在这两个文件中,当程序处理w(2).html)时,里面的空格会被去掉,结果两个文件同名,所以返回系统错误,所以只能选择处理这样的错误,看到文件就删除或手动修改。
完整源码如下
#coding:utf-8
#主要功能是将一个目录文件中所有的目录和文件名字的空格删除
import os
if True:
i=0
for parent, dirnames, filenames in os.walk(os.getcwd()):
if i!=0 :#因为提取的第一个目录为根目录,导致循环的第一步总是出错,所以写一个条件判断省去第一步
print parent
[x, s] = os.path.split(parent)
print os.path.join(x,s)
print os.path.join(x, s.replace(' ', ''))
#rename() 在使用的时候出现了很多次183的错误,原因是
#文件中有两个文件一个有空格一个没有空格,对有空格的文件进行操作之后就会导致命名相同,程序报错
os.rename(os.path.join(x,s), os.path.join(x,s.replace(' ', '')))
print x
print s
continue
else:
i=i+1
第二步,扣除网页中的url,直接使用a标签中与href匹配的值,加上判断是否收录http,并存储url。第三步,扣除网页中的元信息,包括name=description、关键字和p标签、li标签内的文字等。
beautiful中一个非常有用的方法是fand_all(),这个方法直接找到某个标签,然后直接对其进行操作得到一个纯文本文件,所以这里直接感谢几个Label的列表 put 'p' ' li' 'a' 等等。
关于这个标签,我一直想知道哪些标签有字符,哪些没有。可以看到,这些标签基本涵盖了所有的文本信息,所以如果有不对的地方可以批评。后来发现实际的'meta'标签中的文字也可以写在这个循环中。最终版本中也写了循环,这里就不多说了,后面会模仿代码。
写完一个循环,遍历每个标签,使用方法处理文本代码如下
lists = ['p', 'a', 'td', 'li', 'span']
for list in lists:
text1 = soup.find_all(list)
for c in text1:
x = strip_tags(str(c))
print(x.replace('\n', ' '))
if x != None:
sheet1.write(j, col_num, x.replace('\n', ' '))
col_num = col_num + 1
扣除文字后有个小错误,因为是用记事本打开的,所以记事本是一种收录utf-8和BOM的编码格式,这样虽然没有显示在文件头,但是不显示。有一些字符,导致长时间无法将这些文本拆分输出为单列关键词数据。这是一个教训。下次不要用记事本打开txt文件。我用的是komo工具,代码字体和ubuntu很像。很有用。
第四步,提取每个标签的关键词,
进入google搜索,通过TF_IDF处理提取网页上比较“重要”的词,将这些词输入google搜索,得到排名靠前的url,再次提取这些网页的关键词 , 这样就可以建立文本之间的联系。 google搜索的步骤我这里没有写,我看了一篇博客,他介绍了他写的工具magic-google,github地址使用了伪造的浏览器信息和选择不同区域的google地址,这个工具的方式来防止google被屏蔽我们不必制造轮子。代码就不放了,很简单,写两个循环,遍历所有训练文件,每个训练文件取前几个TF_IDF值的关键词输入就ok了
(不定期更新遇到的各种坑,供记录使用)