A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

python实现自动抓取某站点内所有超链接
(仅供学习使用)

代码部分
#!/usr/bin/python

import requests
import time
import re
import sys, getopt  #命令行选项
from bs4 import BeautifulSoup
localtime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) #时间
z=[] #存取网站
x=[] #优化网站,去除冗杂部分

def main(argv):
   url = '' #输入的网址
   file_path = '' #保存路径
   try:
      opts, args = getopt.getopt(argv,"hu:f:",["url=","file="])
   except getopt.GetoptError:
      print ('allsite.py -u <url> -f <file>')
      sys.exit(2)
   for opt, arg in opts:
      if opt == '-h': #帮助
         print ('allsite.py -u <url> -f <file>')
         sys.exit()
      elif opt in ("-u", "--url"): #输入网址
         url = arg
         re1 = requests.get(url) #get网站内容
         re1.encoding = "utf-8"
         html = re1.text
         bt = BeautifulSoup(html, 'html.parser', )
         hh = bt.find_all('a') #查找<a>元素
         for site in hh:
                 z.append(site.get('href')) #进一步过滤得到超链接
         for i in z:
                 if (re.match('//www', str(i)) or re.match('www', str(i))):
                         xx = str(i).replace('//www', 'www', 1)
                         x.append(xx)
                 elif (re.match('http', str(i))): #过滤
                         x.append(str(i))
                 elif (re.match('/', str(i))): #过滤
                         xx = str(i).replace("/", "", 1)
                         if (re.match('/', xx)):
                                 xxx = str(xx).replace("/", "", 1)
                                 x.append(xxx)
                         else:
                                 x.append(url + xx)
                 else: #过滤
                         if (re.search('javascript', str(i)) == None):
                                 x.append(url + str(i))
         print(localtime + "  总共:" + str(len(x)) + "个网址") #输出超链接
         for i in x:
                 print(i)
      elif opt in ("-f", "--file"): #输入保存路径
         file_path = arg
         for i in x: #保存文件
                 with open(file_path, 'a') as file_object:
                         file_object.write(i)
                         file_object.write('\n')

if __name__ == "__main__":
   main(sys.argv[1:])

2 个回复

倒序浏览
有任何问题欢迎在评论区留言
回复 使用道具 举报
或者添加学姐微信
DKA-2018
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马